WPS支持正则函数了,超级实用!

会飞的鱼

KVP函数专家、创作者俱乐部成员

4月24日,WPS版本号更新到了16894,此次更新共新增了12个函数,其中包含了7个LAMBDA类函数,4个WPS独有函数(其中ROUNDBANK函数为16729版本更新),2个其他类辅助函数,具体函数如下图所示。

我将分三天带大家了解新增函数的使用方法。

第1天:LAMBDA类函数

第2天:REGEXP正则函数

第3天:WPS独有函数

今天是第2天,分享REGEXP正则函数。

REGEXP函数语法如下图所示。

一、提取模式

示例1、提取汉字

=REGEXP(A2,"[一-龟]+")

示例2、提取字母

=REGEXP(A5,"[A-z]+")

示例3、提取数字(包含小数)

=REGEXP(A8,"\d+\.?\d*"

二、判断模式

示例4、判断是否为手机号

=REGEXP(A2,"^1[3-9]\d{9}$",1)

三、替换模式

示例5、替换[]中的汉字后计算

=EVALUATE(REGEXP(A2,"\[[一-龟]+\]",2))

四、零宽断言

示例6、提取金额

=REGEXP(A2,"\d+(?=元|块)")

示例7、提取手机号

=REGEXP(A5,"(?<=^|\D)1[3-9]\d{9}(?=\D|$)")

注意事项:预查不支持量词(如 *、+ 或 {n,m}),如下图所示

五、分组匹配

示例8、银行卡号每4位加空格

=REGEXP(A2,"(.{4})",2,"\1 ")

REGEXP函数不支持分组提取,支持分组替换,在写正则表达式时,可以使用括号将指定表达式进行分组,REGEXP函数第3个参数匹配模式,设置(2-替换),分组后使用REGEXP函数第4个参数替换内容,根据实际需求使用"\"加1~N序号,可以引用正则表达式指定组匹配到的内容,示例中的正则表达式规则为匹配任意连续4位内容,因正则表达式加了括号,所以替换内容中"\1"可以返回匹配到的第1组内容,然后加一个" "(空格)作为替换内容,即可实现每4位加空格。

示例9、删除日期

=REGEXP(A2,"([一-龟]+)(\d{4}年\d{1,2}月\d{1,2}日)(\d+[元,块])",2,"\1\3")

正则表达式分为3组

第1组:([一-龟]+) 匹配姓名

第2组:(\d{4}年\d{1,2}月\d{1,2}日) 匹配日期

第3组:(\d+[元,块]) 匹配金额

第4个参数替换内容,引用第1、3组匹配结果,即可实现将第2组匹配的日期删除。

六、非贪婪模式

示例10、提取括号中的内容

=REGEXP(A2,"\(.+?\)")

如果不需要返回括号,可以使用预查,将不会返回括号

=REGEXP(A5,"(?<=\().+?(?=\))")

当一个量词(如 *、+ 或 {n,m})之后紧跟一个问号 ?,如 *?、+? 或 {n,m}?,则该量词变为非贪婪模式。

七、综合示例

示例11、统计姓名出现次数(一个单元格内会多次出现)

=COLUMNS(REGEXP(CONCAT($A$2:$A$7&"-"),C2))

示例12、拆分身份证号(将字符串逐个拆分)

=REGEXP(A2,".")

示例13、手机号、姓名互换位置

=REGEXP(A2,"(\d{11})([一-龟]+)",2,"\2\1")

八、其他说明

REGEXP函数第1个参数不支持数组,但是第2个参数支持数组,如下图所示。

=REGEXP(A2,{"[一-龟]+","[A-z]+","\d+"})

通过示例我们可以发现,当REGEXP第2个参数为数组时,函数将返回数组中每个正则表达式匹配到的首个结果,和TEXTSPLIT函数当第1个参数为数组时,返回拆分后的首个结果一样,并且如果需要对返回的结果进行再次计算,需要做类似"降维"的操作(对REGEXP函数返回结果连接空文本),如下图所示。

=REGEXP(A2,{"[一-龟]+","[A-z]+","\d+"})&""

当数组中的正则表达式匹配到多个值时,无法进行"降维"操作,所以REGEXP函数第2个参数使用数组的限制还是比较大的,正常情况下第2个参数不建议使用数组。

提取多组可以使用以下公式

=TOROW(VSTACK(REGEXP(A2,"[一-龟]+"),REGEXP(A2,"[A-z]+"),REGEXP(A2,"(?<=[a-z])\d+")),,1)

16894版本已开始逐步更新,目前官网还没有更新,想提前体验的小伙伴可以通过下方链接下载

以上是本次分享的内容,欢迎大家留言探讨,我们明天见~

辽宁省
浏览 11991
18
17
分享
17 +1
16
18 +1
全部评论 16
 
WPS365是不是还不支持
· 重庆
回复
 
zha7090

创作者俱乐部成员

请教:[一-龟],这个是表示整个中文字符集的意思?谢谢
· 广东省
回复
会飞的鱼

KVP函数专家、创作者俱乐部成员

准确说是包含常用的汉字字符集
· 辽宁省
回复
 
我的都2024夏季16929版本了怎么没有这些函数?
· 重庆
回复
 
zha7090

创作者俱乐部成员

收藏,待深入学习
· 广东省
回复
 
有大神能说说如何提取各学科名(如:语文、数学、历史、生物学、思想品德……)和提取不同表述法的年级字符串(如:1上、2年级上、3上、一上、二上、三年级上……),谢谢!
· 四川省
回复
regexp(A1,"(语文)|(数学)|(历史)")可以继续加
· 山东省
回复
 
正则确实高效,唯一就是不能直接组
· 福建省
回复
 
这使用越来越快乐了
· 广东省
回复
 
wils

创作者俱乐部成员

还有就是请问,是否支持(?R)这样找正确匹配的括号的正则,谢谢
· 广东省
回复
会飞的鱼

KVP函数专家、创作者俱乐部成员

感谢支持,不同语言的正则语法有差异,是否支持需要自测。
· 辽宁省
回复
 
wils

创作者俱乐部成员

感谢!请问正则是否支持(?i)这样指定忽略大小写之类的flag
· 海南省
回复
会飞的鱼

KVP函数专家、创作者俱乐部成员

感谢支持,不同语言的正则语法有差异,是否支持需要自测。
· 辽宁省
回复
 
辛苦了, 写的好, 最喜欢正则的简洁高效了.
· 河南省
回复
 
写得好,打卡学习
· 重庆
回复
 
wils

创作者俱乐部成员

这下nb了
· 广东省
回复