Excel新函数:正则表达式(REGEX)函数 - Excel函数式编程

发布日期:2025-03-07 15:42    点击次数:167

图片

前一阵子太忙,公众号停止更新了一段时间。最近刚有点时间,想起来看看微软有什么更新,竟然发现微软在Excel中推出了正则表达式函数。

其实很早就有人问我关于Excel中使用正则表达式的问题,还有人吐槽:Word中都支持正则表达式,为什么在Excel中不支持?

现在大家可以安心了,Excel也支持了!这里我就先简单介绍一下这几个正则表达式函数的使用,作为恢复更新的第一篇。

注:现在还是只有测试频道的朋友可以使用这几个正则表达式函数。什么是正则表达式

正则表达式,英文是Regular Expression,简写为Regex,是一种按照特殊规则定义的字符串,用来表示一种字符串模式。

正则表达式经常用来进行字符串查找,匹配或分析,比如检查一个字符串是否符合某种特定的模式,从一个字符串中抽取符合特定模式的子串,或者将符合特定模式的子串替换成给定的字符串。

这三种工作分别对应Excel中的三个函数。

一个典型的正则表达式是这样的:

^a(?=.*\d)(?=.*[A-Z])(?=.*[a-z])[a-zA-Z\d]{7,}

不经过一段时间的学习恐怕是不容易理解这个正则表达式的含义的。

好在,也有一些不那么复杂的可以很容易掌握的规则,比如:

“[0-9]”:任意一个数字

“[a-z]”:任意一个小写字母

“.”:任意一个字符

“a”:一个小写字母“a“

“a*”:任意多个(0个或多个)小写字母”a“

“a+”:一个或多个小写字母”a“

等等等等.....

说实话,我本身对正则表达式函数的真正作用是有所怀疑的。我不是怀疑它的强大功能,而是怀疑有多少Excel用户能真正掌握正则表达式。

不过对普通人来说,这个门槛也降低了很多,因为可以使用AI帮我们生成正则表达式,只要你描述规则,现在一般的AI都可以完成这个工作。比如,在通义千问中,就可以这么提问:

要查找以a开头的包含至少8个数字和字母的字符串,同时包含数字,大写字母和小写字母,请写出正则表达式

AI给出了这样的回答:

图片

REGEXTEST

REGEXTEST函数的作用是检查一个字符串是否符合给定的模式,如果是,返回TRUE,否则返回FALSE。

语法如下:

REGEXTEST (文本、模式、[case_sensitivity])

其中,

第一个参数“文本”,表示需要检查的字符串;

第二个参数“模式”,表示给定的模式;

第三个参数指示是否按照大小写敏感的方式检查。如果是0,表示大小写敏感,如果是1,表示大小写不敏感。缺省为0。

下面是一个例子:

图片

B列使用TEGEXTEST检查A列相应的字符串是否符合给定模式。检查结果A1符合,A2不符合。REGEXEXTRACT

这个函数的作用是一个字符串中提取符合给定模式的子串。

语法如下:

REGEXEXTRACT (文本、模式、[return_mode]、[case_sensitivity])

其中,

第一个参数“文本”,表示待提取子串的字符串;

第二个参数“模式”,表示给定的模式;

第三个参数,表示返回类型。如果为0,返回匹配的第一个子串;如果为1,以数组形式返回匹配的所有子串;如果为2,返回第一个匹配项的捕获组;

第四个参数,指示是否按照大小写敏感的方式匹配。如果是0,表示大小写敏感,如果是1,表示大小写不敏感。缺省为0。

下面是一个例子:

图片

这里我们使用了正则表达式:

[A-Z][a-z]+

这里的模式是:开头是一个大写字母,然后跟着1个或多个小写字母。

所以在字符串:

Regular Expression Functions

中,有三个符合这个模式的字符串:

Regular

Expression

Functions

因此,B1中的公式就返回第一个:Regular。

B2中的公式需要返回一个数组,包含所有的三个匹配结果。

这里我们没有演示捕获组的用法,那是正则表达式中比较高级的概念。我们在以后再详细介绍。

可以想象,这个函数对于那些字符串分拆的场景是非常有用的。

REGEXREPLACE

这个函数的作用是将字符串中符合给定模式的子串替换为其他的内容。

语法如下:

REGEXREPLACE (文本、模式、replacement、[occurrence]、[case_sensitivity])

其中,

第一个参数“文本”,表示给定的字符串;

第二个参数“模式”,表示给定的模式;

第三个参数“replacement”,表示替换后的字符串;

第四个参数,表示需要替换的子串序号。如果是0,表示所有符合该模式的子串都需要替换。如果是1,就替换第一个符合模式的子串,以此类推。如果是负数,就从后往前数。

第五个参数,指示是否按照大小写敏感的方式匹配。如果是0,表示大小写敏感,如果是1,表示大小写不敏感。缺省为0。

下面是一个例子:

图片

这里,我们希望将身份证号的后四位替换成****,因此使用正则表达式:

"[0-9]{4}$"

$表示字符串结尾,{4}表示4个,全部的含义是结尾的四个数字构成的子串。

这个公式的作用就是将结尾的四个数字替换成"****"。

尽管REGEXREPLACE函数中没有提到捕获组,不过使用捕获组可以完成很多复杂的替换。我们以后再详细介绍。

总结

从概念上,这三个函数非常容易理解。它们的功能也非常强大。不过相信大家也会发现,要想发挥着三个函数的威力,理解和掌握正则表达式是必须的。后面我会结合正则表达式介绍详细介绍这三个函数的使用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。