Excel 于今年推出了一系列正则函数,给文本处理带来的极大的便捷性,今天咱们就来看看最常用的 REGEXEXTRACT 是怎么使用的。
REGEXEXTRACT(text, pattern, [return_mode], [case_sensitivity])
Excel REGEXEXTRACT 函数使用语法如上所示,各个参数的含义解释如下:
文本或对包含要从中提取字符串的文本的单元格的引用。
注意:参数没有中括号 [ ]
包裹,说明是必选参数。
文本样式,即正则表达式。该参数是正则匹配的核心参数。
注意:不同语言的正则表达式语法略有不同,不可生搬硬套。
参数有中括号 [ ]
包裹,说明是可选参数。
该参数表示返回模式,指定要提取的字符串,默认取 0:
0:返回与正则匹配的第一个字符串
1:以数组形式返回与正则匹配的所有字符串
2:以数组形式返回第一个匹配项中的捕获组
注意:捕获组是正则表达式模式的一部分,用括号“ (...) ”括起来。它们允许单独返回单个匹配的单独部分。
同上,这个参数也是可选参数。
该参数表示是否区分大小写,默认情况下,匹配项区分大小写。输入以下选项之一:
0:区分大小写
1:不区分大小写
正则表达式匹配时,会使用到一些元字符,以下是正则表达式中常见的元字符及其匹配规则描述:
元字符 | 匹配规则描述 | 分类及补充描述 |
---|---|---|
. | 匹配任意单个字符(除了换行符) | |
^ | 匹配输入字符串的开始位置 | 匹配锚点 |
$ | 匹配输入字符串的结束位置 | 匹配锚点 |
* | 匹配前面的子表达式零次或多次 | 重复限定符 |
+ | 匹配前面的子表达式一次或多次 | 重复限定符 |
? | 匹配前面的子表达式零次或一次 | 重复限定符 |
{n} | 匹配确定的n次 | 重复限定符 |
{n,} | 至少匹配n次 | 重复限定符 |
{n,m} | 最少匹配n次且最多m次 | 重复限定符 |
[] | 匹配方括号内的任意字符(字符集) | 枚举字符集 |
[^...] | 匹配方括号内未列出的任意字符(字符集) | 排除字符集 |
| | 逻辑或操作符,匹配两项之间的任意一项 | 逻辑或(多选结构) |
\ | 转义特殊字符或表示特殊序列 | 转义符 |
() | 将多个表达式组合成一个子表达式,用于分组 | 分组并捕获 |
(?:...) | 用于分组但不捕获匹配的文本 | 分组但不捕获 |
(?=...) | 正向预查,在某个表达式前面查找匹配,但不包括在匹配结果中 | 正向先行断言 |
(?!...) | 负向预查,查找不在某个表达式前面的匹配 | 负向先行断言 |
(?<=...) | 正向回顾,在某个表达式后面查找匹配,但不包括在匹配结果中 | 正向后行断言 |
(?<!...) | 负向回顾,查找不在某个表达式后面的匹配 | 负向后行断言 |
正则匹配时,还可以使用字符集形式来匹配多种字符,比如所有数字、字母、汉字等,如下是一些常用字符集:
字符集 | 匹配规则描述 |
---|---|
[0-9] | 匹配所有数字 |
[a-z] | 匹配所有小写字母 |
[A-Z] | 匹配所有大写字母 |
a-zA-Z0-9 | 匹配所有小写字母、大写字母及数字 |
一-龟 | 基本上可以匹配所有汉字(由于Unicode 是不断扩展的,此字符集存在无法匹配的情况) |
正则匹配时,还会用到一些转义序列,用来批量匹配文本及数字等特殊字符,下面是一些常用的转义序列:
转义序列 | 匹配规则描述 |
---|---|
\d | 匹配任意单个数字(等同于 [0-9]) |
\D | 匹配任意单个非数字字符(等同于 [^0-9]) |
\w | 匹配任意单个“单词字符”(等同于 [a-zA-Z0-9_]) |
\W | 匹配任意单个非“单词字符”(等同于 [^a-zA-Z0-9_]) |
\s | 匹配任意单个空白字符(包括空格、制表符、换行符等) |
\S | 匹配任意单个非空白字符 |
转义序列和元字符结合即可配合多种规律字符。比如 \d+
可以匹配任意长度数字,\d{2}
可以匹配两位长度的数字。
学习了这么多理论,咱们来找几个例子实践一下:
假设原始文本为:张三:语文 100分,数学 99分,英语 98分。那么匹配所有成绩的写法为:
=REGEXEXTRACT(A1,"\d+",1)
匹配数字
当分数包含小数点时,以上写法不再适用:
匹配带小数点的数字1
可以这么写来获取正确结果:
=REGEXEXTRACT(A1,"\d+(?:\.\d+)?",1)
匹配带小数点的数字2
假设原始文本为:春秋航空 9C1234 2024-10-20 12:34:56 要提取上述文本中的航司信息,可以这么写:
=REGEXEXTRACT(A1,"[一-龟]+")
匹配汉字
假设原始文本为:Please contact us at John_doe.2023+feedb%ack@moonshot-ai.co.uk for more information. 要提取上述文本中的邮箱信息,可以这么写:
=REGEXEXTRACT(A1,"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b")
匹配邮箱
今天的分享就到这里了,希望对你有所启发,欢迎点赞、分享。