这是我等了十年的 Excel 功能
Excel 在处理数字方面一直很出色,但模式匹配却是另一回事。多年来,验证电子邮件格式或从杂乱的数据集中提取电话号码意味着要使用各种函数来清理凌乱的 Excel 表格,把 FIND、MID 和 SUBSTITUTE 堆叠到公式中,这些公式很快就变得难以阅读。我已经习惯了这些变通方法,但它们从来都不够简洁。
微软终于通过在 Excel 中添加原生的正则表达式(REGEX)功能来填补了这一空白。REGEXTEST、REGEXEXTRACT 和 REGEXREPLACE 将程序员数十年来使用的模式匹配能力直接引入你的电子表格中。如果你曾希望 Excel 能像 Python 或 JavaScript 那样处理文本模式,这些函数正是你所需要的。每个函数都有其独特的用途,三者结合可以覆盖大多数模式匹配需求。
Excel 中的正则表达式(REGEX)函数仅限 Microsoft 365 订阅用户使用。如果你使用的是一次性购买版本,如 Office 2021,这些函数将无法使用。
使用 REGEXTEST 现在查找模式变得方便了
我不再需要复杂的逻辑来验证数据条目
REGEXTEST 检查文本字符串是否匹配特定模式。它返回 TRUE 或 FALSE——仅此而已。这使其非常适合用于数据验证、筛选和条件格式化。
语法很简单:
=REGEXTEST(text, pattern, [case_sensitivity])- 文本:您想要与模式进行测试的字符串。
- 模式: 要匹配的正则表达式模式。
- 大小写敏感性: 这是一个可选参数。设置为 0(默认)表示区分大小写匹配,设置为 1 表示不区分大小写匹配。
在 REGEXTEST 之前,检查产品代码是否符合特定格式意味着需要将 LEN、ISNUMBER 和 MID 函数组合在一起,几乎难以阅读。现在,它只需一个公式。
在电子表格中,产品代码列包含类似“PRD-12345-X”、“ITEM-987”和“A12B34”的条目。要验证哪些代码包含至少连续四个数字,可以使用以下公式。
=REGEXTEST(A2, "\d{4}")像“PRD-12345-X”这样的代码返回TRUE,而“ITEM-987”返回FALSE,因为“987”只有三位数字。类似地,“A12B34”没有连续的四位数字,所以它也返回FALSE。
这种验证过去需要一堆嵌套函数或一个 VBA 脚本。REGEXTEST 可以用一行代码完成,而且你六个月后仍然可以看懂它的作用。
提取特定数据终于变成了一个一步完成的过程
REGEXEXTRACT 是 Excel 缺少的工具
REGEXEXTRACT 根据模式从字符串中提取匹配的文本。它不是返回 TRUE 或 FALSE,而是提供实际匹配的内容,当你需要从混乱的条目中提取干净的数据时,这会非常有用。
语法遵循相同的结构:
=REGEXEXTRACT(text, pattern, [return_mode], [case_sensitivity])- 文本:包含您想要提取的数据的字符串。
- 模式: 定义要捕获内容的正则表达式。
- return_mode:这是一个可选参数。设置为 0(默认)只返回第一个匹配项,设置为 1 则返回所有匹配项,以溢出数组的形式。
- 区分大小写: 可选参数;使用 0(默认)表示区分大小写,使用 1 表示不区分大小写。
电子表格中的“客户邮箱”列是说明此功能重要性的完美例子。像“联系方式:jane.doe@email.com”和“由 john_smith@domain.org 下单”这样的条目将实际的电子邮件地址隐藏在周围的文本中。手动提取这些地址将非常繁琐。
以下公式仅提取电子邮件地址:
=REGEXEXTRACT(B2, "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")
对于第一个条目,它返回“jane.doe@email.com”——没有额外的文本,也不需要手动清理。
交易描述列显示了另一种实际用途。像“收到 $250 付款”和“已支付发票 $1,200”这样的条目包含隐藏在句子中的美元金额。以下公式可以将“$250”和“$1,200”直接提取到单独的列中。
=REGEXEXTRACT(E2, "\$[\d,]+\.?\d*")我过去常用 FIND、MID 和 LEN 的组合来做这件事——这些公式很笨重,一旦源格式稍有变化就会出错。REGEXEXTRACT 能够优雅地处理各种变化,因为其模式可以适应不同的结构。
使用 REGEXREPLACE 可以更快地进行精确编辑
你现在可以替换图案,而不仅仅是角色
REGEXREPLACE 会查找与某个模式匹配的文本,并将其替换为其他内容。当数据需要标准化时——例如不同格式的电话号码、不一致的空格或散布在整列中的不需要的字符——你会使用这个函数。
语法增加了一个参数:
=REGEXREPLACE(text, pattern, replacement, [occurrence], [case_sensitivity])- 文本:您想要修改的字符串。
- 模式: 用于识别要替换内容的正则表达式。
- 替换内容:将用来替换每个匹配项的文本。使用捕获分组($1, $2)来保留原始文本的部分内容。
- 出现次数: 可选。指定要替换的匹配项——0(默认)替换所有匹配项,1 替换第一个,2 替换第二个,依此类推。
- 区分大小写:可选。设置为 0(默认)表示区分大小写,设置为 1 表示不区分大小写。
电子表格中的电话号码列恰好展示了这个功能的用处。条目的格式各不相同:“(123) 456-7890”,“123-456-7890”,“+1 123 456 7890”,以及“123.456.7890”。对这样的不一致数据进行分析或查询,很容易出错。
下面的公式会去除除数字以外的所有内容,将所有这些变体转换为干净的 "1234567890"。
=REGEXREPLACE(D2, "[^\d]", "")如果你更喜欢格式化输出,那么请使用以下公式将每个条目标准化为“(123) 456-7890”格式:
=REGEXREPLACE(REGEXREPLACE(D2, "[^\d]", ""), "(\d{3})(\d{3})(\d{4})", "($1) $2-$3")如果你事先知道每一个可能的分隔符,SUBSTITUTE 可以处理这个问题——但你需要为括号、短横线、点和空格分别写一个嵌套函数。而 REGEXREPLACE 可以用一个模式处理所有这些情况。
这些函数弥合了 Excel 与编程之间的差距
使用专业工具不需要成为程序员
多年来,正则表达式对 Excel 用户来说一直只是听说过,但如果不切换到 Python、VBA 或 Power Query,根本无法使用。如果你想使用模式匹配,要么学习一种脚本语言,要么构建勉强可用的复杂公式。而现在,这种障碍已经不存在了。
这三个函数将核心编程概念直接引入了电子表格环境。其语法与开发者在 JavaScript、Python 等语言中使用的类似——因此你在网上找到的任何正则表达式模式在 Excel 中几乎无需修改即可使用。以前需要代码转换的 Stack Overflow 回答现在可以直接应用。
这对于那些介于普通电子表格用户和全职开发人员之间的人来说最为重要。你可能知道足够的知识来自动生成报告,但不足以为每个数据清理任务编写 Python 脚本。REGEX 函数正好弥补了这一空白。
学习曲线也比较平缓。像 \d+ 匹配数字,或 [A-Za-z]+ 匹配字母这样的基本模式可以处理大多数常见任务。你不需要掌握每一个正则表达式功能——只需足够解决你面前的问题即可。对于复杂的多步骤任务,了解如何使用 Power Query 进行数据转换仍然很有用,但为了简单的模式匹配而打开一个单独的编辑器总显得过于繁琐。现在你可以留在工作表上,通过一个公式就能获得相同的结果。

