WPS正则函数升级了,功能更加强大!

会飞的鱼
会飞的鱼

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

2024年4月WPS正式推出了REGEXP正则函数,这一功能迅速在表格领域引起了广泛关注。随着用户们对REGEXP函数的学习和使用,其强大的功能逐渐得到了认可。然而,在使用过程中,用户们也遇到了一些问题。为了提升用户体验,本次更新不仅修复了已知的问题,还在原有功能的基础上增添了新的功能,使得REGEXP函数更加完善。接下来,我们将深入了解这些改进和新增的功能。

升级后的REGEXP函数语法如下所示。

1、第1个参数支持数组参数

正则函数的时候,第1个参数是不支持数组的,在使用REGEXP函数时只能输入公式后向指定方向填充,或使用MAP、SCAM、REDUCE等函数才能实现溢出效果,实际使用有些不便,本次升级后,第1个参数支持数组参数,在第3个参数匹配类型值为1(判断)、2(替换)模式下,在一个单元格输入公式后即可实际溢出。

示例1、判断手机号格式是否正确

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

示例2、删除中括号中的汉字后计算表达式

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

示例3、提取姓名

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

2、第1个、第2个参数同时使用数组

示例4、提取姓名、拼音和数字

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

当第1个参数和第2个参数同时使用数组时,函数将两个参数的数组进行数组运算后匹配,使用将两个参数的数组使用&运算符拼接可以直观的查看数组运算后的结果,如下图所示。

=A11:A17&" - "&{"[一-龟]+","[A-z]+","\d+"}

示例5、提取付款方式对应的金额

=IFNA(REGEXP(A2:A10,B1:E1&"\K\d+"),"-")

3、第3个参数新增加匹配类型

示例6、提取所有姓名

当第1个参数为数组时,第3个参数为0或省略,在提取模式时,REGEXP函数将返回数组中每个值匹配到结果的首值,如下图所示。

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

此次升级第3个参数增加一个匹配模式3(完整提取),当设置此模式时,REGEXP函数将返回数组中每个值匹配到的完整结果(一个三维数组)需要使用REDUCE、MAP等函数循环将完整结果显示出来,公式如下图所示。

=REDUCE(,REGEXP(A2:A8,"[一-龟]+",3),VSTACK)

因每行匹配结果返回的结果数量不同,使用VSTACK函数拼接后,返回结果少的行数将返回错误值#N/A补齐数组,使用IFNA函数将#N/A显示成空文本即可,公式如下图所示。

=IFNA(REDUCE(,REGEXP(A2:A8,"[一-龟]+",3),VSTACK),"")

需要将每个值匹配到的姓名返回到一个单元格中,可以使用MAP函数循环,ARRAYTOTEXT函数拼接,公式如下图所示。

=MAP(REGEXP(A2:A8,"[一-龟]+",3),ARRAYTOTEXT)

如果需要其他分隔符号,可以使用SUBSTITUTE函数替换,或TEXTJOIN函数拼接,如下图所示。

=SUBSTITUTE(MAP(REGEXP(A2:A8,"[一-龟]+",3),ARRAYTOTEXT),", ","、")

=LET(fx,LAMBDA(x,TEXTJOIN("、",,x)),MAP(REGEXP(A2:A8,"[一-龟]+",3),fx))

如果需要将提取到姓名显示成一行,使用REDUCE函数循环后使用TOCOL函数转换即可,公式如下图所示。

=TOCOL(REDUCE(,REGEXP(A2:A8,"[一-龟]+",3),VSTACK),3)

在以上几个示例中,在使用循环函数拼接结果时使用了语法糖简写,当数组中的每个都能匹配到结果时,这样写是没有问题的,如果数组中的值出现没有匹配结果时,REGEXP函数会返回错误值#N/A,导致VSTACK函数无法拼接,可以使用LAMBDA函数,然后使用IFNA函数将错误值转换成空文本,公式如下图所示。

=IFNA(REDUCE(,REGEXP(A2:A8,"[一-龟]+",3),LAMBDA(x,y,VSTACK(x,IFNA(y,"")))),"")

如果需要返回一列结果,公式如下图所示。

=TOCOL(REDUCE(,REGEXP(A2:A8,"[一-龟]+",3),LAMBDA(x,y,IF(ISNA(y),x,VSTACK(x,y)))),3)

示例7、提取付款方式对应的金额(一个单元格内有重复的付款方式)

=MAP(REGEXP(A2:A10,B1:E1&"\K\d+",3),LAMBDA(x,IFNA(SUM(--x),"-")))

7月版本17813已开始灰度更新,已经更新到此版本的小伙伴可以开始使用新REGEXP函数了。

还没有更新到17813版本的小伙伴如果想提前体验新REGEXP函数,可以到社区下载64位内测版,64位内测版本17726也支持新REGEXP函数。

需要注意的是,安装不同位数的WPS时,无法覆盖安装,需要先卸载已经安装的WPS(安装64位版本需要先卸载32位版本的WPS,安装回32位时也要先卸载64位版本的WPS)

https://bbs.wps.cn/topic/34523
WPS社区64位下载地址

- - - END - - -

辽宁省
浏览 6816
40
53
分享
53 +1
50
40 +1
全部评论 50
 
王联峰
如果能把实例表格提供下载实践学习就好了。
· 河北省
回复
 
拉登Dony
太牛了
· 山东省
回复
 
一伊
打卡
· 四川省
回复
 
不明真相的群众จุ๊บ
打卡
· 新疆
回复
 
小陶同学
打卡,不能没有wps ai
· 湖北省
回复
 
sweet love
是不是我版本高了,你上面的我测试了都出不来结果
· 浙江省
回复
 
sweet love
我用了=MAP(REGEXP(A15:A23,B14:E14&"\k\d+",3),LAMBDA(x,IFNA(SUM(--x),"-")))怎么出来的结果跟你的不一样。好像不对呀
· 浙江省
回复
 
浅梦星河
现学现卖!~ 基础价格780+超高费用780*1.08 1622.4 =EVALUATE(CONCAT(REGEXP(A1,"[\d+*.]+")))
· 吉林省
回复
 
李枼
打卡
· 北京
回复
 
细品茶茗
谢谢分享
· 山东省
2
回复
 
@
能不能做个正则表达式参数汇总表分享下?
· 广东省
2
回复
 
WPS_1625812453
打卡
· 吉林省
2
回复
 
闹笑☼
厉害,学习!!
· 广东省
2
回复
 
满月
打卡
· 江苏省
2
回复
 
赵二
非常实用!
· 辽宁省
2
回复
赵二
学习。
· 辽宁省
1
回复
 
7YANG.
· 福建省
1
回复
 
saAE86
打卡
· 广东省
1
回复
 
依依
学习
· 浙江省
1
回复
 
:)
再次学习
· 湖北省
1
回复
 
雲埿
学习了
· 重庆
回复