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 - - -

辽宁省
浏览 10505
59
69
分享
69 +1
65
59 +1
全部评论 65
 
神风怪盗
reduce,map,lamda函数能不能细致讲解一下,不理解
· 湖北省
回复
 
神风怪盗
示例2regexp第二参数为啥不是"[[一-龟]+]"这样表示
· 湖北省
回复
会飞的鱼
会飞的鱼

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

正则里 []是特殊符号,在匹配特殊符号自身时需要使用转义符转义
· 辽宁省
回复
 
WPS_1641186020
打卡
· 四川省
回复
 
18409182
WPS AI函数升级后,部分用户反映计算延迟和功能不稳定,期待进一步优化。
· 云南省
1
回复
 
夜行者
学习
· 山东省
回复
 
涛涛不绝
示例5,我这里显示的不对啊。用那个示例,我这里提取出来的,是4列一样的数字。
· 河北省
回复
 
涛涛不绝
学习了
· 河北省
回复
 
Siserly
学习
· 江苏省
回复
 
国之光荣
不错
· 广东省
回复
 
myjia_wen
学习了
· 河南省
回复
 
ZORRO
学习了666
· 广西
回复
 
Genre
学习一下
· 上海
1
回复
 
依依
学习
· 浙江省
回复
 
孟尚杰
问下使用AI功能是否可以自动写正则表达式的计算公式?
· 重庆
回复
 
王联峰
如果能把实例表格提供下载实践学习就好了。
· 河北省
回复
 
拉小登Dony
拉小登Dony

创作者俱乐部成员

太牛了
· 山东省
回复
 
一伊
打卡
· 四川省
回复
 
不明真相的群众
打卡
· 新疆
回复
 
小陶同学
打卡,不能没有wps ai
· 湖北省
回复
 
sweet love
是不是我版本高了,你上面的我测试了都出不来结果
· 浙江省
回复