.hd-box .hd-fr

Excel 正则表达式的位置匹配

2024-11-03 11:45秋叶Excel(小爽)5评

原文标题:《这个 Excel 新函数,强大到不可思议!》

大家好,我是会一点数据处理的小爽~

前面我们讲过正则函数,了解到正则的插入、拆分用法。

之前都是利用正则匹配模式匹配字符,比如:

\d 匹配一个数字

\w 匹配一个数字字母下划线,(在 ascii 模式下)

[a-c] 匹配一个 a 到 c 之间的一个字符

但是有时会有一个特殊需求,匹配指定内容之前或之后的位置

比如 (小爽),我们要匹配括号里面的内容,就可以通过匹配位置,进而获取内容。

(位置小爽位置)

所以今天,就来讲讲正则的匹配位置。

1、开头结尾限定

开头结尾位置,也有对应的正则语法。

^:用于匹配字符串的开头,表示一个模式应该出现在字符串的开头位置。

$:在正则表达式中,表示匹配字符串的结尾位置。

正则表达式的「匹配」有两种概念:一种是匹配字符,一种是匹配位置,这里的 ^,$ 就是匹配位置的。

利用 ^$ 我们可以判断字符串开头结尾是否存在某个字符串。

❶ 包含

如下图所示,需要判断字符串中是否包含小爽。

=REGEXTEST(A2,"小爽")

❷ 开头

判断开头是否存在小爽。

=REGEXTEST(A2,"^小爽")

❸ 结尾

判断结尾是否存在小爽。

=REGEXTEST(A2,"小爽$")

❹ 精确

字符串是否为小爽。

=REGEXTEST(A2,"^小爽$")

到这里,我们已经学会了开头结尾对应的正则语法,接下来我们来看看指定内容前后位置的正则语法。

2、指定内容前后位置

如下图所示,我们需要提取中括号里的信息:

传统做法:

借助 TextSplit 拆分函数。

=TEXTSPLIT(A2{"【""】"}TRUE)

当然也可以使用正则函数,通过中括号取反来提取。

=REGEXEXTRACT(A2"[^【】]+"1)

不过,这里来介绍一种新的做法。

来看看我们的字符串,可以发现,我们要提取的是中括号里的内容。

【小爽】【爽鸭】【Excel】

如果不匹配字符,只匹配位置,那么位置之间的内容,就是需要提取的内容。【(位置) 内容 (位置)】

问题来了!!!

在正则表达式中,有没有只匹配位置的正则语法?

有的,那就是零宽断言

什么是零宽断言?

正则表达式中的零宽断言是一种特殊的结构,它在匹配的时候不会消耗字符,只是对匹配位置进行条件判断。

如同 ^ 代表开头,$ 代表结尾,零宽断言也有类似的作用,它们只匹配某些位置,在匹配过程中,不占用字符,所以被称为 "零宽"

主要有以下四个:

看起来好复杂?

看个例子你就懂了!

字符串:❁小爽 ω

正则语法:(?<=❁) 小爽 (?=ω)

巧记 (?<=):正则中有个左边的小于号。也就是查找小爽左边为❁的位置。

巧记 (?=):没有小于号,也就是查找小爽右边为 ω 的位置。

返回结果:小爽

知道了零宽断言,那我们再来看公式,就不难理解:

=REGEXEXTRACT(A2,"(?<=【).+?(?=】)",1)

【位置小爽位置】【位置爽鸭位置】【位置excel位置】

公式解析:

(?<=【).+?(?=】)

何为非贪婪匹配?

假如我们去掉?号,就是贪婪匹配,它会尽可能多的匹配,就会匹配到结尾。

3、最后的话

敲黑板:

本文中,小爽主要带领大家了解正则表达式中比较难的匹配位置。

其中,我们了解到:

文章比较难,但是掌握了匹配字符和位置,就相当于掌握了正则语法。

正则表达式是匹配模式,要么匹配字符,要么匹配位置

关于匹配字符的文章大家可以戳:

WPS 中的正则

Excel 中的正则

本文来自微信公众号:秋叶 Excel (ID:excel100),作者:小爽

广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。

下载IT之家APP,分享赚金币换豪礼
相关文章
大家都在买广告
热门评论
查看更多评论