作者:虑得先生
什么是正则表达式?
正则表达式 (Regular Expression, 简称 regex/RE) 是一种用来匹配、查找、替换和验证文本 的特殊字符串模式。你可以把它理解成一套“文本搜索的高级规则”——用少量的字符组合,就能精准描述你想要找的文本格式。
它只做三件事:匹配、提取、替换
-
检查某个字符串是否符合我规定的模式(匹配);
-
把符合的部分拎出来(提取);
-
把符合的部分替换成别的(替换)。
举个例子:
单元格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小白,我也可以陪跑伴读。