①WPS新增的REGEXP函数,非常好用!强烈推荐

龙逸凡
龙逸凡

创作者俱乐部成员

WPS最近版本新增了Excel都没有的函数:

  • 正则表达式函数REGEXP

  • 批量替换函数SUBSTITUTES

  • 四舍五入六成双函数ROUNDBANK

这一波更新,领先Excel,给WPS点赞

今天我们来介绍正则表达式函数REGEXP。

这个函数非常好用。有了它,很多文本函数都可以不用了。

在介绍它之前,我们一起来学习一下正则表达式的基础知识。

正则表达式基础知识

正则表达式就是用一些特殊的字符来表达或总结字符串的规律或特性。比如

用\d或[0-9]表示数字,那么\d{11}就表示11位的整数。

操作符

含义

示例

.

小数点,表示任何单个字符

[]

中括号表示字符集,对个字符给出取值范围

[abc]表示abc[a-z]表示a-z单个字符(任意一位小写字母)

[0-9]表示单个任意数字

[^]

非字符集。对单个字符给出排除范围

[^abc]表示非a或非b或非c的单个字符

*

星号表示前一个元素的0次或者无限次的扩展

abc*表示ababcabccabcccc等等(匹配 ab

+

前一个元素的1次或者无限次的扩展

abc+表示 abcabcccabccabccccc等(不匹配 ab

?

前一个元素的0次或者1次扩展

abc?仅表示 ababc。

可以把“4th|4”简化为“4(th)?”。我们看到“?”作用的元素是整个括号了

|

左右表达式中的任意一个。左右表达式可以是多字符。注意与[ ]的区别

abc|def表示abcdef

{m}

扩展前一个字符m次

ab{2}c表示abbc

{m,n}

扩展前一个字符m至n次(含m和n次)

ab{1,2}c匹配abcabbc

^

匹配字符串开头

^abc表示abc在一个字符串的开头,即不匹配 aabc

$

匹配字符串结尾

abc$表示abc在一个字符串的结尾,即不匹配abcd

()

分组标记内部只能使用|操作符

(abc)表示abc ,(abc|def)表示abcdef

\d

一位数字,等价于[0-9]

\w

组成单词的字符,等价于[A-Za-z0-9_]

表示字符小写大写的a-z和数字0-9以及下划线_

下面我们来看一下REGEXP函数的基本语法及应用案例

REGEXP语法

=REGEXP ( 字符串,正则表达式,匹配模式,替换内容 )

第三参数的匹配模式有三种:0提取、1判断、2替换

提取字符串中的数字

正则表达式解释:

[0-9]:匹配任意一个数字字符,从0到9。

.:匹配小数点字符。在正则表达式中,点是一个特殊字符,表示匹配除了换行符之外的任意单个字符。但在这里,由于它被放在了方括号内,它失去了特殊含义,只表示匹配字面量的点字符。

-:匹配短横线字符。同样,在方括号内,短横线只是一个普通字符,不表示范围。

[0-9.-]:方括号表示一个字符集,该集合包含数字0到9、点字符和短横线字符。匹配时,它会尝试匹配这个集合中的任意一个字符。

+:表示匹配前面的字符集一次或多次。因此,[0-9.-]+ 会匹配一个或多个连续的数字、点或短横线字符。

如果字符串中有多个数字,在最外围套一个SUM函数,就能求和

=SUM(--REGEXP(A5,"[0-9.-]+"))

拆分中英混合的字符串

提取中文的公式:

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

[一-龟]代表汉字,详细解释请阅读下面的文章

提取非中文的公式:

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

正则表达式解释:

  1. []:这是一个字符集,用于匹配括号内列出的任意单个字符。

  1. ^:在字符集的开头,它表示否定,即匹配不在字符集中的任何单个字符。

  1. 一-龟:这表示从汉字“一”到汉字“龟”的字符范围。注意,这个范围并不是按照字母顺序来定义的,而是按照 Unicode 编码的顺序。这意味着它将匹配从“一”到“龟”这个范围内所有的汉字。

  1. +:表示匹配前面的模式(在这里是字符集)一次或多次。

提取第一个汉字后的所有内容

公式:

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

正则表达式解释:

[一-龟]:这是一个字符集,表示匹配从汉字“一”到汉字“龟”之间的任意单个汉字。注意,这里的范围并不是基于字典顺序,而是基于这些汉字在 Unicode 编码中的顺序。

+:表示匹配前面的字符集(在这里是 [一-龟])一次或多次。也就是说,这个正则表达式会匹配一个或多个连续的汉字,这些汉字的范围是从“一”到“龟”。

.*:这里的 . 表示匹配除了换行符之外的任意单个字符,而 * 表示匹配前面的字符(在这里是 .)零次或多次。因此,.* 会匹配任意数量的任意字符(包括零个字符)。

提取第一个汉字前的内容

公式

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

正则表达多解释:

^:这个符号表示匹配字符串的开始位置。也就是说,整个正则表达式模式必须匹配字符串的起始部分。

[]:这是一个字符集,用于匹配括号内列出的任意单个字符。

^:在字符集的开头,它表示排除、否定,即匹配不在字符集中的任何单个字符。注意,这里的 ^ 是字符集内的第一个字符,因此它表示否定,而不是匹配字符串的开始位置。

一-龟:这表示从汉字“一”到汉字“龟”的字符范围。注意,这个范围并不是按照字母顺序来定义的,而是按照 Unicode 编码的顺序。

+:表示匹配前面的模式(在这里是字符集)一次或多次。

按指定字符拆分

公式:

=REGEXP(A2,"([^,]+)")

按换行符拆分

=REGEXP(A2,".+")

正则表达式解释

.:这个符号在正则表达式中表示匹配除了换行符之外的任意单个字符。

+:这个符号表示匹配前面的字符(在这里是 .)一次或多次。

还有其他更复杂的用法,我们在REGEXP函数的第二篇、第三篇文章中介绍。

重庆
浏览 9438
25
18
分享
18 +1
15
25 +1
全部评论 15
 
守纪律才不剁手
拆分中英混合的字符串,这里我按文中例子试了一下,只能拆分出来“货币资金”,后面的中文词都出不来分列到后面几个单元格,请问是什么问题?
· 湖南省
回复
龙逸凡
龙逸凡

创作者俱乐部成员

要看你的公式才知道。我猜你是用的Excel,如果是Excel的REGEXEXTRACT函数,第三参数设为1提取全部,公式=REGEXEXTRACT(A1,"[一-龟]+",1,0)。
· 重庆
回复
 
zha7090
zha7090

创作者俱乐部成员

请教:\d,代表一位数字,等价于[0-9],表示任意“一位”数字。那么\w,组成单词的字符,等价于[A-Za-z0-9_] 。它表示这四种字符中的任意一个,还是多个?谢谢
· 广东省
回复
龙逸凡
龙逸凡

创作者俱乐部成员

[A-Za-z0-9_]表示其中的一个。要表示多个要用量词*+或者{m,n},比如[A-Za-z0-9_]+
· 重庆
回复
 
zha7090
zha7090

创作者俱乐部成员

收藏,学习了
· 广东省
回复
 
zha7090
zha7090

创作者俱乐部成员

您好,请教一下,为什么在03部分的公式里,在REGEXP前面加有:-- 谢谢!
· 广东省
回复
阿杰
--是为了将文本字符转化为数值 regexp正则表达式提取出来的内容是文本形式的,比如明铰456个,提取出来是 ”456“的格式 加入--是为了将文本字符转化为数值,--"456"=456,便于你后续的汇总和运算 类似的方式还有*1,value()等
· 江苏省
2
回复
 
悠哉游哉
自己随意的试着玩"[0-9\.]+",好像也可以提取含小数点的数值
· 北京
回复
茈铭
\是转义字符,意在告诉编译程序后边的内容不是通常的意思,比如.单独出现表示的是匹配任意非换行符的字符,\.就表示相当于告诉系统,你别把后边的.想复杂了,你就给我找.这个符号本身就行。但是实际上.出现在字符集[]内部时,已经不具备上述特殊功能了,所以你加不加转义字符其实编译出来的结果都一样,加了\反而显得赘余。
· 上海
4
回复
 
悠哉游哉
学习了
· 北京
回复