正则表达式REGEXP简介

wps新路
wps新路

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

重庆
浏览 1183
14
29
分享
29 +1
32
14 +1
全部评论 32
 
锦诚
打卡
· 山东省
回复
 
清华学弟任泽岩
清华学弟任泽岩

创作者俱乐部成员

另:本帖最下方的一行字让我感到了一种梗。
· 辽宁省
回复
 
清华学弟任泽岩
清华学弟任泽岩

创作者俱乐部成员

支持!打卡!学习!(为支持新路老师,不惜使用可能被关小黑屋的语言来回复)
· 辽宁省
回复
 
彤彤
老师讲的很详细,赞赞赞
· 安徽省
回复
 
廖琼
新路老师厉害
· 广东省
回复
 
晋志勇
新路老师厉害
· 浙江省
回复
 
蓝尘
路哥不出手则以!一出手就是满满干货啊
· 浙江省
回复
 
哈哈
👍👍👍👍👍👍👍
· 贵州省
回复
 
初❤
路哥厉害
· 四川省
回复
 
亂雲飛渡
请教老师,网上有大神使用\p来做公式,请问\p代表什么?
· 广东省
回复
wps新路
wps新路

WPS函数专家

匹配Unicode字符,一般我用的少 个人一般用的其他方法来做,就没去记,大概查了点用法: \p{L} 匹配任何字母字符(等价于[a-zA-Z])。 \p{N} 匹配任何数字字符(等价于[0-9])。 \p{P} 匹配任何标点符号字符。 \p{S} 匹配任何符号字符。 \p{C} 匹配任何其他字符(即控制字符)。 \p{Han}用于匹配任何属于“汉字”类别的字符
· 重庆
回复
 
亂雲飛渡
谢谢老师!刚需,已收藏学习。
· 广东省
回复
 
WPS_1591171398
真厉害呀,犹如天人下凡一锤5啊,天不生新路,万古如长夜啊!!!
· 江苏省
回复
wps新路
wps新路

WPS函数专家

太夸张了,希望对你有帮助
· 重庆
回复
 
路哥6P(破音)
· 广东
回复
wps新路
wps新路

WPS函数专家

。。。大晚上的,轻声点,扰民就不好了,一起学习进步
· 重庆
回复
 
冬日暖阳
收藏一下,慢慢消化
· 河南省
回复
wps新路
wps新路

WPS函数专家

感谢支持,希望有帮助,如有不足,请指出,如有疑惑一起讨论,共同进步
· 重庆
回复
 
黄诗诗
新路老师
· 广西
回复
wps新路
wps新路

WPS函数专家

感谢支持,希望能有帮助
· 重庆
回复
 
在0和1的世界
收藏,摸鱼时候学一点,慢慢消化。 ( • ̀ω•́ )✧
· 广东省
回复
wps新路
wps新路

WPS函数专家

互相讨论,共同进步
· 重庆
回复
 
懒得批爆
懒得批爆

创作者俱乐部成员

新路老师做个加载项,优雅的使用正则表达式,手写代码是大神的行为,我等小老百姓还是用傻瓜方式比较接地气。
· 四川省
回复
wps新路
wps新路

WPS函数专家

那个做不来。。你太高看我了。
· 重庆
回复
 
马成功老师
马成功老师

创作者俱乐部成员

大神文档必属精品。果断点赞收藏。可惜没法投币。只好一键三连。
· 北京
回复
wps新路
wps新路

WPS函数专家

额,感谢支持,欢迎讨论 我继续完善。
· 重庆
回复
 
尹俊超
尹俊超

创作者俱乐部成员

新路大佬整理的太太太详细啦!!!!!
· 河南省
回复
wps新路
wps新路

WPS函数专家

额 初步先放一点内容,还有一些我觉得可能没有太大帮助的就没放上来,灵感太少,不知道放什么进来,欢迎讨论 我继续完善,感谢
· 重庆
回复