作者:虑得先生

什么是正则表达式?

正则表达式 (Regular Expression, 简称 regex/RE) 是一种用来匹配、查找、替换和验证文本 的特殊字符串模式。你可以把它理解成一套“文本搜索的高级规则”——用少量的字符组合,就能精准描述你想要找的文本格式。

它只做三件事:匹配、提取、替换

  1. 检查某个字符串是否符合我规定的模式(匹配);

  2. 把符合的部分拎出来(提取);

  3. 把符合的部分替换成别的(替换)。

举个例子:

单元格A1的内容“张三13901234567”,这条记录内容违反了“数据三范式”的“字段原子性”原理,需要进行“数据清洗”,要把电话号码单独提取出来。

好消息是,WPS表格推出了正则表达式函数:REGEXP,而Excel只有Microsoft 365提供,PC版的Excel没有。

WPS的REGEXP函数语法:

=REGEXP(text, pattern, [match_type], [replace])

解释:

  • text:文本字符串或含文本字符串的单元格引用;

  • pattern:元字符

  • match_type=0(默认)→返回第一处匹配结果;

  • match_type=1→返回所有匹配(溢出到相邻单元格);

  • 第 4 位参数,给字符串就变成“替换模式”,此时返回替换后的完整文本。

元字符:

  • **.**(点号)任意单个字符(默认不含换行)

  • **\d** 数字 0-9,等价于 [0-9]

  • **\D** 非数字,等价于 [^0-9]

  • **\w** 字母、数字、下划线,等价于 [A-Za-z0-9_]

  • **\W** 非单词字符,等价于 [^A-Za-z0-9_]

  • **\s** 任意空白(空格、制表、换行等)

  • **\S** 任意非空白

  • **\t** 制表符 Tab

  • **\n** 换行符

  • **\r** 回车符

  • **^** 行首锚点(WPS 默认单行模式)

  • **$** 行尾锚点

  • **\b** 单词边界

  • **\B** 非单词边界

  • ***** 0 次或多次(贪婪)

  • **+** 1 次或多次(贪婪)

  • **?** 0 或 1 次(贪婪)

  • **{n}** 恰好 n 次

  • **{n,}** 至少 n 次

  • **{n,m}** n 到 m 次

  • ***?** 0 次或多次(懒惰)

  • **+?** 1 次或多次(懒惰)

  • **??** 0 或 1 次(懒惰)

  • **()** 捕获组,后续可用 $1 $2 … 反向引用

  • **(?:)** 非捕获组

  • **(?=)** 正向肯定预查(零宽)

  • **(?!)** 负向肯定预查(零宽)

  • **[]** 字符集,匹配其中任意一个字符

  • **[^]** 负字符集,匹配未列出的字符

  • **\** 转义符;要匹配字面量 * 请写 \*

实操:

还是这例子:单元格A1的内容“张三13901234567”,需要提取电话号码。

在单元格B1中输入:=REGEXP(A1,"\d{11}")

说明:在A1单元格中,提取:\d 代表 0-9 的数字,{11}代表提取11位数。

在写完“=REGEXP”后,使用编辑栏的“fx”按钮,在弹出来的参数编辑框里写,比较方便。

虽然Ctrl+F、 Ctrl+E 也能完成部份相同的任务,但使用REGEXP函数,更精准,提取内容时也更丰富和灵活。

会计人学会这一个函数,可以节省大量的数据清洗时间。

我是虑得先生,准备在网上卖会计人需要的EXCEL模版和python自动化脚本,帮助会计人节省重复操作的时间,助力会计人早日升职加薪!当然,如果你是EXCEL或python小白,我也可以陪跑伴读。