Microsoft Excel 中的 Regex 公式

2025年3月17日 | 阅读 12 分钟

众所周知,正则表达式在开发者领域无处不在,因为它们用于验证各种网站输入,以及在文本中的大字符串中搜索不同类型的单词模式,以及用于许多其他用途。

而在 Microsoft Excel 中,正则表达式(VBA RegEx 或简称 VBA Regex)并未得到太多宣传,在实际应用中也不那么流行,因为大多数用户都擅长使用简单的LEFT、RIGHT、MID以及FIND函数来处理他们的字符串。

在本教程中,我们将讨论 Microsoft Excel 中使用的不同概念,它们如下:

  1. 您如何理解 Microsoft Excel 中的 Regex 术语?
  2. Microsoft Excel 中是否存在 Regex 函数?
  3. Microsoft Excel 中的 Regex 备忘单是什么?
  4. 您如何理解 Microsoft Excel 中的自定义 Regex 函数?
  5. 您如何理解 Microsoft Excel 中的 Regex 匹配函数?
  6. Microsoft Excel 中的 Regex 提取函数是什么意思?
  7. Microsoft Excel 中的 Regex 替换函数是什么意思?

您如何理解 Microsoft Excel 中的 Regex 这个词?

在 Microsoft Excel 中,正则表达式(又称regexregexp)是主要定义搜索模式的特殊编码字符序列。通过使用该模式,我们可以有效地在给定字符串中查找匹配的字符组合,或验证数据输入。

而正则表达式主要有自己的语法,包括独特的字符、运算符以及结构。

  • 例如: [0-5] 匹配 0 到 5 之间的任何单个数字。

正则表达式主要用于各种编程语言,包括 Visual Basic for Applications (VBA) 和 JavaScript。后者有一个独特的 RegExp 对象,可以用来创建自定义函数以满足需求。

Microsoft Excel 中是否存在 Regex 函数?

对上述问题的回答是:遗憾的是,Microsoft Excel 中不存在内置的 Regex 函数。如果有人想在他们的公式中使用正则表达式,那么他们需要创建用户定义的函数(基于 VBA 或 .NET),或者他们可以安装通常支持正则表达式的第三方工具。

Microsoft Excel 中的 Regex 备忘单是什么?

我们都知道,无论给定的正则表达式模式是简单还是非常复杂,它都是用通用语法构建的。我们提供了一个主要 Regex 模式的快速参考,将帮助个人掌握基础知识。在进一步学习示例时,它也可以作为我们的备忘单;

如果我们熟悉正则表达式,我们可以直接跳转到 RegExp 函数。

字符

Microsoft Excel 使用这些最常用的模式来匹配特定字符。

图案描述示例匹配
.通配符:通配符用于匹配 Excel 工作表中的任何单个字符,但不包括换行符。.ota lot, hot, got, @ot
\d数字字符:它被认为是 0 到 9 之间的单个数字。\d在 *a2b* 中,匹配 *2*
\D任何非数字字符\D在 b2c 中,匹配 b 和 c。
\s空白字符:包括空格、制表符、换行符和回车符。.\s.在 *3 cents* 中,匹配 *3 c*
\S任何非空白字符\S+在 *30 cents* 中,它用于匹配 *30 cents*。
\w单词字符:它被定义为任何 ASCII 字母、数字或下划线。\w+在 *5_dogs*** 中,匹配 *5_dogs*。
\W任何非字母数字字符或下划线字符。\W+在 *5_dogs*** 中,匹配 ***。
\tTab (制表符)
\n新行\n\d+以下两行字符串匹配 10 5 dogs 10 Rabbit
\转义字符的特殊含义,以便我们可以有效地搜索它。\. \w+\.转义句点,以便我们可以找到字符串中的字面“.”字符,例如 *Mr., Mrs., Prof.*

字符类

通过这些模式,我们可以轻松地匹配 Excel 工作表中不同字符集的各种元素。

图案描述示例匹配
[字符]用于匹配给定方括号中的任何单个字符。d[oi]gdogdig
[^字符]用于匹配不在方括号内的任何单个字符。d[^oi]g匹配 *dag, dug, d1g*。它不匹配 *dog* 和 *dig*。
[从-到]用于匹配方括号内给定范围内的任何字符。[0-9] [a-z] [A-Z]从数字 0 到 9 的任何单个数字。以及从 a 到 z 的任何单个小写字母。以及从 A 到 Z 的任何单个大写字母。

量词

在 Microsoft Excel 中,量词被认为是特殊的表达式,它们负责指定要匹配的字符总数;它应该分别应用于它之前的字符。

图案描述示例匹配
*零次或多次出现2b*2, 2b, 2bb, 2ccc 等。
+一次或多次出现sho+在 *short* 中,匹配 *sho*。在 *shooting* 中,匹配 *shoo*。
?零次或一次出现boa?tboat, bot
*?零次或多次出现,但可能性较小。2a*?在 *2a, 2aa* 和 *2aaa* 中,匹配 *2a*。
+?零次或多次出现,但可能性较小。po+?在 *pot* 和 *poor* 中,匹配 *po*。
??零次或一次出现,但尽可能少。roa??在 *road* 和 *rod* 中,它匹配 *ro*。
{n}匹配前一个模式 n 次。\d{3}正好 3 位数字。
{n,}它匹配前一个模式 n 次或更多次。\d{5,}5 位或更多数字。
{n,m}它有效地用于匹配前一个模式 n 到 m 次。\d{7,9}7 到 9 位数字。

Grouping

在 Microsoft Excel 中,分组构造主要用于从给定的源字符串中捕获子字符串,以便我们可以有效地对其执行某些操作。

语法描述示例匹配
(模式)捕获组:它专门用于捕获匹配的子字符串并为其分配一个序数。(\d+)在 *5 dogs and 10 rabbits* 中,捕获 *5*(组 1)和 *10*(组 2)。
(?:模式)非捕获组:此组用于匹配一个组,但不捕获它。(\d+)(?: rabbit)在 *5 dogs and 10 rabbits* 中,捕获 *10*。
\1分配给组 1 的内容。(\d+)\+(\d+)=\2\+\1匹配 5+10=10+5 并捕获 *5* 和 *10*,它们分别在捕获组中。
\2分配给组 2 的内容。

锚点

在 Microsoft Excel 中,锚点指定输入字符串中需要查找匹配的位置。

锚点描述示例匹配
^它是字符串的开头。^\d+字符串开头存在的任何数量的数字。在 *5 dogs and 10 rabbits* 中,它匹配 *5*。
$它代表“字符串的结尾”。\d+$字符串末尾存在的任何特定数量的数字。在 *10 plus 5 gives it 15* 中,匹配 15。
\b单词边界\bjoy\b它匹配 *joy* 作为独立单词,但不匹配 *enjoyme*nt。

交替(OR)构造

在 Microsoft Excel 中,交替操作数启用 OR 逻辑,以便我们可以有效地匹配此元素或该元素。

Construct描述示例匹配
|它用于匹配由竖线分隔的任何单个元素。(s|sh)ells在 *she sells sea shells,* 中,匹配 *sell* 和 *shells*。

环视构造

当我们需要匹配后面或前面有其他东西(或没有)的项时,Excel 中的环视构造非常有用。这些表达式有时被称为“零宽度断言”,因为它们有效地匹配一个位置而不是实际字符。

注意。在 Visual Basic for Application (VBA) RegEx 风格中,不支持后行断言。

图案描述示例匹配
(?=)正向先行断言X(?=Y)当表达式 X 后面跟着 Y 时,它用于匹配表达式 X。
(?!)负向先行断言X (?!Y)如果表达式 X 后面不跟着 Y,它就会有效地匹配表达式 X。
(?<=)正向后行断言(?<=Y)X当表达式 X 前面是 Y 时,它通常会匹配表达式 X。
(?<!)负向后行断言(?<!Y)X当表达式 X 前面不是 Y 时,它用于匹配表达式 X。

您如何理解 Microsoft Excel 中的自定义 Regex 函数?

根据以上内容,我们已经知道 Microsoft Excel 没有内置的 RegEx 函数,因此为了启用正则表达式,我们需要创建三个自定义 VBA(Visual Basic for Application)函数(也称为用户定义函数)。

VBA RegExp 函数在 Excel 中如何工作?

现在在本节中,我们将讨论内部机制以及后端到底发生了什么。

因此,当我们开始在 VBA(Visual Basic for Application)中使用正则表达式时,我们可以激活 RegEx 对象库引用,或者有效地使用 CreateObject 函数。

RegExp 对象封装了 4 个属性,它们如下:

  1. Pattern:它用于匹配给定输入字符串中定义的模式的特定类型。
  2. Global:Global 用于控制是在给定输入字符串中查找所有匹配项,还是只查找第一个。
  3. Multiline:Multiline 可用于确定是在多行字符串中匹配给定模式,还是仅在第一行匹配。
  4. IgnoreCase:它定义给定的正则表达式是否区分大小写(默认)或不区分大小写。

# 示例:Microsoft Excel VBA Regex

现在在这个例子中,我们将检查提到的模式是否存在于给定的文本中,借助 RegEx.Test。

我们将按照以下步骤来使用 VBA RegEx。

步骤 1:我们需要定义一个新的子程序来创建宏。

代码


Regex Formula in Microsoft Excel

步骤 2:之后,我们将使用 RegEx 定义两个变量作为对象,它们可以用于创建 RegEx 对象和字符串 Str。

代码


Regex Formula in Microsoft Excel

步骤 3:在此步骤中,我们将使用 CreateObject 函数创建我们的 RegEx 对象。

代码


Regex Formula in Microsoft Excel

步骤 4:现在,我们将添加要用 RegEx 函数测试的模式。

代码


Regex Formula in Microsoft Excel

步骤 5:之后,我们将定义需要在此其中有效检查给定模式的字符串。

代码


Regex Formula in Microsoft Excel

步骤 6:然后我们将使用 RegEx.Test 来测试给定模式是否在名为 str 的变量中,并进行调试。

代码


Regex Formula in Microsoft Excel

步骤 7:之后,我们将按 F5 或从键盘上按下 Run 按钮来运行代码以获得输出。

您如何理解 Microsoft Excel 中的 Regex 匹配函数?

众所周知,*RegExpMatch* 函数用于搜索输入字符串中与正则表达式匹配的给定文本,如果找到匹配项,则返回“TRUE”。否则,它将返回“FALSE”。

语法

其中:

  • Text(必需):包含要搜索的一个或多个字符串。
  • Pattern(必需):要匹配的正则表达式。
  • Match_case(可选):它主要控制是否在区分大小写(TRUE 或 FALSE)方面匹配或忽略文本。

# 示例:如何使用正则表达式匹配给定的字符串

在给定的数据集中,我们将假设我们要识别相应的包含 SKU 代码的条目。

并且可以看出,每个 SKU 都以 2 个大写字母开头,后跟一个连字符和 4 位数字,因此我们可以使用以下表达式来匹配它们。

其中

  • [A-Z]{2} 表示 A 到 Z 的任何 2 个大写字母,
  • \d{4} 表示 0 到 9 的任何 4 位数字。
  • 而单词边界 \b 表示 SKU 是一个独立的单词,而不是更大字符串的一部分。

现在使用上面建立的模式,我们将开始像往常一样输入公式,并且respective 函数的名称将出现在 Excel 的 AutoComplete 有效建议的列表中。

Regex Formula in Microsoft Excel

假设原始字符串位于 A5,则公式如下:

为了方便起见,我们可以将给定的正则表达式输入到一个单独的单元格中,并为 *pattern* 参数使用绝对引用($A$2),因为这确保了当我们将公式复制到其他单元格时,给定的单元格地址将保持不变。

为了显示我们的文本标签而不是显示 TRUE 和 FALSE,请将 RegExpMatch 嵌套在 IF 函数中,并在 *value_if_true* 和 *value_if_false* 参数中指定所需的文本。


Regex Formula in Microsoft Excel

Microsoft Excel 中的 Regex 提取函数是什么意思?

Microsoft Excel 中的 RegExpExtract 函数搜索与正则表达式匹配的子字符串,然后提取所有匹配项或特定匹配项。

公式

其中,

  • Text:需要搜索的文本字符串。
  • Pattern:Pattern 被认为是需要匹配的正则表达式。
  • Instance_num:Instance_num 是可选的,主要是表示需要提取哪个实例的序号。
  • Match_case:它主要控制是否在区分大小写(TRUE 或 FALSE)方面匹配或忽略文本。

# 示例:如何使用正则表达式提取字符串

在此示例中,我们讨论如何提取发票号码,为此我们将使用简单的 regex 函数来匹配任何 7 位数字。

现在我们将把模式放在 A2 单元格中,我们将用这个简洁易懂的公式来完成工作。

如果模式匹配,则公式将提取发票号码;如果未找到匹配项,则返回空。

Regex Formula in Microsoft Excel

Microsoft Excel 中的 Regex 替换函数是什么意思?

Microsoft Excel 中的 *RegExpReplace* 函数主要用于将与 regex 匹配的值替换为我们指定的文本。

其中

  • Text:Excel 工作表中需要搜索的文本字符串。
  • Pattern:Pattern 是必需字段,是需要匹配的正则表达式。
  • Replacement:Replacement 是可以用来替换匹配子字符串的文本。
  • Instance_num:要替换的实例。默认值是“所有匹配项”。
  • Match_case:它主要控制是否在区分大小写(TRUE 或 FALSE)方面匹配或忽略文本。

# 示例:如何使用 regex 替换或删除给定的字符串

我们都知道,我们的一些记录通常包含信用卡号,这是非常机密的。我们可以将其替换为其他内容或完全删除,这两个任务都可以通过*RegExpReplace* 函数来实现。

如何?在第二种情况下,我们将被替换为空字符串。

在我们的示例表中,所有卡号都有 16 位数字,分为 4 组,并用空格分隔,因此要找到它们;我们将通过正则表达式来模拟模式。

对于替换,可以使用以下字符串。

并且这是一个完整的公式,我们可以使用它来**替换**信用卡号,借助不敏感的信息。

此外,由于存在于单独的单元格 A2 和 B2 中的 regex 和替换文本,该公式同样有效。

Regex Formula in Microsoft Excel

在 Microsoft Excel 中,“删除”是“替换”的一个特例,为了**删除**信用卡号,我们可以将空字符串("")用于*replacement*参数。


Regex Formula in Microsoft Excel