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

会飞的鱼
会飞的鱼

WPS函数专家

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

辽宁省
浏览 2960
24
33
分享
33 +1
32
24 +1
全部评论 32
 
依依
学习
· 浙江省
回复
 
:)
再次学习
· 湖北省
回复
 
雲埿
学习了
· 重庆
回复
 
smile
学习了
· 上海
回复
 
易燃易爆炸
打卡
· 湖北省
回复
 
hikarutoya
打卡
· 山东省
回复
 
wyatt
wyatt

@金山办公

飞鱼老师的教程就是专业
· 广东省
回复
 
满意
喜欢
· 辽宁省
回复
 
Liquor
打卡学习
· 新疆
1
回复
 
不明真相的群众จุ๊บ
打卡
· 新疆
1
回复
 
WPS_1724848393
WPS AI之前已领取的AI体验权益会收回吗?
· 山东省
1
回复
 
染指流年
wps的ai真的太方便了,支持支持支持wps的ai真的太方便了,支持支持支持
· 山东省
1
回复
 
のGogogo111
飞鱼老师,提取姓名的例子,如果要提取非张姓的人员姓名,应该如何写正则函数?
· 江苏省
2
回复
会飞的鱼
会飞的鱼

WPS函数专家

=LET(a,TOCOL(REDUCE(,REGEXP(A2:A8,"[一-龟]+",3),VSTACK),3),FILTER(a,LEFT(a)<>"张")) 提取后筛选比较简单实用,直接提取有些麻烦。
· 辽宁省
1
回复
 
依依
感谢分享
· 浙江省
1
回复
 
幸福春
每看一次都会有新的收获
· 山东省
1
回复
 
董欣煜
学习了
· 吉林省
1
回复
 
杨黎
A+
· 重庆
1
回复
 
雾伴湾沟
太厉害了, 学习学习.
· 福建省
1
回复
 
龙逸凡
龙逸凡

创作者俱乐部成员

感谢,第一次见到\K的用法,学习了
· 重庆
1
回复
 
二毛陀
打卡
· 广东省
1
回复