正则表达式REGEXP简介
WPS函数专家
通过函数说明可以看到regexp共用4个参数其中后两个参数为非必选,
原始字符串:可以是单元格,可以是手动构建字符串
正则表达式:为构建的表达式,下方介绍对应的参数及意义
匹配模式:共有3个选项
写0或者不写,为提取模式,将符合正则的内容提取出来,返回的内容如果有多个,则返回数组
写1进入判断模式,看原始字符串内是否符合正则表达式的判断
写2进入替换模式,将原始字符串中的符合正则表达式的内容替换成4参数
替换内容:仅当匹配模式为2的时候生效
📢正则表达式参数(显示不完整,文末提供了下载链接)
参数 | 说明 |
[0123456789] | 匹配[]内的任一一个字符,符合其一则可匹配 |
[0-9] | [0-9]和[0123456789]相同意思 |
[a-z] | 匹配所有小写字母 |
[A-Z] | 匹配所有大写字母 |
[0-9a-zA-Z] | 匹配所有数字、小写字母、大写字母 |
[0-5a-fA-E] | 匹配数字0至5,小写字母a到f,大写字母A-E中的任一一个 |
[一-龟] | 提取汉字,在其他语言里我更习惯[\u4e00-\u9fa5],wps的正则不支持 |
. | 匹配除换行符以外的任一字符 |
\w | 匹配字母、数字或、下划线 |
\W | 和\w刚好相反 |
\d | 匹配数字,等同于[0-9] |
\D | 匹配非数字(和\d相反) |
\n | 匹配换行符 |
^ | 匹配字符串开始 |
$ | 匹配字符串的结尾 |
\s | 匹配空白字符 |
\S | 匹配非空白字符(和\s相反) |
A|B | 匹配字符A或者字符B(用|隔开),如新|路,匹配的是新或者路的字符 |
[^...] | 匹配除了[]内的所有字符,如[^新路]匹配的是除了新和路的所有字符 |
* | 匹配前面的字符出现0次或者多次,比如zoabzfff用zo*能匹配到zo和z |
+ | 匹配前面的字符出现1次或者多次,比如zzfafzzzzfafr用z+能匹配到zz和zzzz |
? | 匹配前面的字符出现了0次或者1次,且加上了?进入非贪婪模式,尽可能的匹配最短的字符串,如AAAA,用A+?匹配到的是{A,A,A,A}数组,用A+匹配到的是AAAA |
{n} | 指定字符出现n次才进行匹配,比如字符串新路,用新{2}匹配不到,但是新新路是可以匹配到的 |
{n,} | 指定字符大于等于n次才可以匹配 |
{n,m} | 指定字符大于等于n次,小于等于m次才进行匹配 |
\ | 转义字符,如果需要匹配比如*则需要在前面加上\ 比如14*25 145*25,需要且仅匹配14*的时候正则表达式需要写 14\*, |
内容(?=判断字符) | 正向先行断言,当内容后面有判断字符才进行提取,比如用 \d+(?=[元分])匹配123元456角789分,则只能匹配到123和789匹配不到456 |
内容(?!判断字符) | 负向先行断言,当内容后面没有判断字符才进行提取,比如用 \d+(?![元分])匹配1元456角7分,则只能匹配到456,匹配不到1和7 |
(?<=判断字符)内容 | 正向后行断言,当内容前面有判断字符才进行提取 |
(?<!判断字符)内容 | 负向后行断言,当内容前没有判断字符进行提取 |
📢示例(显示不完整,文末提供了下载链接)
提取模式:
提取示例(3参数不写或写0) | 结果 | 公式 | 说明 |
小王花费3元,小红花费5.5元,小明花费22元 | 30.5 | =SUM(--REGEXP(A2,"\d+(\.\d+)?")) | 提取整数或者小数并求和。将()内的视为一个整体,()重复0次则返回整数部分\d+,重复1次则返回小数部分\d+\.+d+,其中.因为在正则里有意义,所以需要转义下,则匹配到的结果是{"3","5.5","22"},因为是文本型数字需要通过--转成数值后sum进行求和 |
小王2元小李5元小张50元小王100元 | 102 | =SUM(--REGEXP(A3,"(?<=小王)\d+")) | 求小王花费了多少钱。通过零宽断言进行先判断数字前是否为小王,则匹配出来{"2","100"}这个数组,文本转值后进行sum求和 |
联系人:张三电话号码13800138000地址北京市朝阳区建国路88号 | 13800138000 | =REGEXP(A4,"\d{11}") | 提取电话号码,提取数字连续出现11次的,这样就可以排除掉最后的88这种小于11位数字的内容 |
张伟,李婷,王芳,赵敏,张磊涛,刘波,杨洋,陈思,张强,黄丽 | 张伟,张磊涛,张强 | =TEXTJOIN(",",,REGEXP(A5,"张[一-龟]{1,2}")) | 提取姓张的名字。提取的是张姓且后面跟上汉字出现1到2次的字符,这样两个字的名字和三字名字都能被提取到,然后通过textjoin组合连接,在本题也可以用 张[一-龟]+ 来提取。 |
📢判断模式:(显示不完整文末提供了下载链接)
判断示例(3参数写1) | 结果 | 公式 | 说明 |
300 | FALSE | =REGEXP(A8,"[5-9]\d{2}",1) | 判断是否是3位数且大于500,首先构建百位数,因为大于500,所以肯定百位为5-9任意数字,接着判断后面是否跟上了2位数字 |
600 | TRUE | =REGEXP(A9,"[5-9]\d{2}",1) | 同上 |
张三丰 | TRUE | =REGEXP(A10,"^张",1) | 通过^判断是否以张姓开头 |
李三丰 | FALSE | =REGEXP(A11,"^张",1) | 同上 |
张三丰 | TRUE | =REGEXP(A12,"丰$",1) | 通过$的设置判断是否以丰字结尾 |
张三疯了 | FALSE | =REGEXP(A13,"丰$",1) | 同上 |
替换模式就不演示了,就是将符合条件的替换成指定内容
打个广告,QQ:317844190
文档链接:https://kdocs.cn/l/cqHhTuydOz1c
wps版本号:16929
创作者俱乐部成员
创作者俱乐部成员
WPS函数专家
WPS函数专家
WPS函数专家
WPS函数专家
WPS函数专家
WPS函数专家
创作者俱乐部成员
WPS函数专家
创作者俱乐部成员
WPS函数专家
创作者俱乐部成员
WPS函数专家