Excel使用正则表达式

Excel也可以用正则表达式了~!在 Excel 中使用正则表达式(Regex)可以极大地增强数据处理能力

正则表达式是一种强大的文本模式匹配工具,用于搜索、替换和验证字符串。本来Excel有许多的文本处理函数,比如:

SEARCH/FIND - 查找文本位置
MID/LEFT/RIGHT - 提取子字符串
SUBSTITUTE - 替换文本
IF/IFERROR - 条件判断

但是仅仅有这些,在一些场景下还是不太方便,而如果要有正则表达式,就会提效很多:

可喜的是在新版的Excel中,有了正则表达式函数,我们来看一下其中的代表:

REGEXEXTRACT 函数

REGEXEXTRACT 函数允许基于提供的正则表达式从字符串中提取文本。 可以从第一个匹配中提取第一个匹配项、所有匹配项或捕获组。

语法
REGEXEXTRACT 函数提取所提供文本中与模式匹配的字符串。
REGEXEXTRACT 函数的语法为:
REGEXEXTRACT (文本、模式、[return_mode]、[case_sensitivity]

其中的参数说明如下:

论点 描述
text(必需) 文本或对包含要从中提取字符串的文本的单元格的引用。
模式(必需) 正则表达式 (“regex”) ,用于描述要提取的文本模式。
return_mode 一个数字,指定要提取的字符串。 默认情况下,返回模式为 0。 可能的值为:0: 返回与模式匹配的第一个字符串1: 以数组形式返回与模式匹配的所有字符串2: 以数组的形式返回第一个匹配项中的捕获组注意:捕获组是正则表达式模式的一部分,用括号“ (...) ”括起来。 它们允许单独返回单个匹配的单独部分。
case_sensitivity 确定匹配项是否区分大小写。 默认情况下,匹配项区分大小写。 输入以下选项之一:0: 区分大小写1: 不区分大小写

让我们通过一个案例来了解Excel的正则表达式功能REGEXEXTRACT

【案例】假设你是一个水果贩子,你记记得有点乱,每一笔交易像下表中的“明细”一样,是“品类+金额”形式的。现在我们需要计算每一笔交易总金额是多少, 涵盖什么水果。

v2-20701c50499cb34aa510212dc94a9e56_1440w

当然,我们也可以用很复杂的文本处理函数逻辑来做,但是如果用正则表达式REGEXEXTRACT 就会非常简单:

我们先来看求和部分:

我们在C2单元格中输入=SUM(INT(REGEXEXTRACT(B2,"\d+",1)))

两个外层函数不多解释,SUM()是求和,INT()是将正则表达式抽取出来的部分转化为可以计算的数值形式

我们来看看里面的正则表达式抽取函数REGEXEXTRACT(B2,"\d+",1),第一个参数B2代表要处理的文本是B2单元格,第二个参数“\d+”代表要抽取对应文本中带阿拉伯数字样式的字符串,第三个参数1代表“以数组形式返回与模式匹配的所有字符串”

写出函数之后,他就计算出来B2单元格中,所有的数字之和。

v2-40d14a034755c995cf5f032568544096_1440w

我们在点击单元格下拉,就获得了每一笔交易的交易金额

v2-3c00575294dca75faf3768278b8bf35c_1440w

我们在来看第二个字段“有哪些水果”如何填充。我们在D2单元格输入如下公式:

=REGEXEXTRACT(B2,"[一-龟]+",1)

中间公式中[一-龟]代表所有的汉字(在汉字字符集中,第一个是“一”,最后一个是“龟”,“一”-“龟”就是所有的汉字)

其他参数上面已经讲过了,我们通过这个公式,就将汉字格式的水果整理出来了

v2-04867f33a68f32cfd128117924dff340_1440w

最后,常用的一些正则表达式模式参考如下:

用途 正则表达式 说明
电子邮件 ^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$ 匹配有效电子邮件格式
手机号码 ^1[3-9]\d{9}$ 匹配中国大陆手机号
身份证号 `^[1-9]\d{5}(181920)\d{2}(0[1-9]1[0-2])(0[1-9][12]\d3[01])\d{3}[\dXx]$` 匹配18位身份证号
提取数字 \d+ 匹配一个或多个数字
提取中文 [一~龟]+ 匹配中文字符