在 Excel 中使用 RegEx
虽然 Excel 并不原生支持 RegEx,但您可以通过在 Windows 上编写 VBA 脚本自定义函数,或在 Mac 上启用外接程序来实现。下面我们将演示如何启用一个正则函数,从 Excel 的某一列中提取文本。
Windows 版
首先,按 Alt+F11 打开 Visual Basic 编辑器。也可通过工具 > 宏 > Visual Basic 编辑器进入。然后单击 插入 > 模块。
将以下函数粘贴到模块中:
Public Function CustomRegExpExtract(inputText As String, regexPattern As String, Optional instanceNumber As Integer = 0, Optional matchCase As Boolean = True) As Variant
Dim textMatches() As String
Dim matchesIndex As Integer
Dim regex As Object
Dim matches As Object
On Error GoTo ErrHandler
CustomRegExpExtract = ""
' Create a regular expression object
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = regexPattern
regex.Global = True
regex.MultiLine = True
' Set case sensitivity
If matchCase Then
regex.IgnoreCase = False
Else
regex.IgnoreCase = True
End If
' Execute the regex pattern on the input text
Set matches = regex.Execute(inputText)
If matches.Count > 0 Then
If instanceNumber = 0 Then
' If instanceNumber is 0, return all matches in an array
ReDim textMatches(matches.Count - 1, 0)
For matchesIndex = 0 To matches.Count - 1
textMatches(matchesIndex, 0) = matches.Item(matchesIndex)
Next matchesIndex
CustomRegExpExtract = textMatches
Else
' If instanceNumber is specified, return the match at that instance
CustomRegExpExtract = matches.Item(instanceNumber - 1)
End If
End If
Exit Function
ErrHandler:
' Handle errors by returning an error value
CustomRegExpExtract = CVErr(xlErrValue)
End Function
' Modified from an original script by Patrick Matthews
保存函数并返回工作表。现在,将工作簿另存为启用宏的格式,文件扩展名为 .xlsm。
在 Excel 工作表中使用该函数
启用宏后,您就可以像使用普通函数一样在 Excel 中使用 CustomRegExpExtract 来解析复杂字符串模式,其中:
inputText为要解析的原始字符串;
regexPattern为用于解析 inputText 的正则表达式模式;
instanceNumber默认返回该模式的所有实例;也可输入整数来指定要返回的实例序号;
matchCase指定匹配时是否区分大小写(TRUE 或省略表示区分;FALSE 表示不区分)。
假设我们想从一个字段中提取电话号码。可以在任意单元格中输入正则模式(如下示例位于单元格 A2)。单元格 A6 中是自由文本字符串示例 "Sophia, 1111111111"。在单元格 B6 输入 =CustomRegExpExtract(A6,$A$2)。该函数会将字符串与单元格 A2 中的正则模式进行匹配,从而提取电话号码,并返回 "1111111111",如预期。

Mac OS 版
遗憾的是,Mac OS 不支持 MS VBScript Regular Expressions 5.5 库。要在 Mac 上的 Excel 中实现复杂的模式匹配,有两种选择:使用高级筛选或安装外接程序。

使用高级筛选
Excel 的高级筛选有助于基于多重条件执行复杂的数据筛选操作。该功能在处理大型数据集时尤为实用。以下是使用高级筛选的方法:
- 准备数据:确保数据呈表格形式,并具有清晰的表头。
- 创建条件区域:在工作表的单独区域设置筛选条件。该区域应与需要筛选的列拥有相同的表头。在这些表头下方填写筛选条件。将多个条件置于同一表头下表示 "或" 逻辑,置于不同行表示 "与" 逻辑。
- 选择数据:单击数据集中的任意单元格,或选择需要筛选的整个范围。
- 设置筛选:在 Excel 功能区中单击数据选项卡,找到排序和筛选组中的高级。在“高级筛选”对话框中,选择在原位筛选还是将结果复制到其他位置。指定“列表区域”(您的数据)。指定“条件区域”(您设置筛选条件的区域)。单击“确定”应用筛选。
假设您有包含 Name、Age、City 三列的数据集,想要筛选出在 New York 且年龄大于 30 岁的人,或任何在 Los Angeles 的人。您的条件区域可能如下所示:
|
Name |
Age |
City |
|
>30 |
New York | |
|
Los Angeles |
安装外接程序
- Kutools for Excel:Kutools 是一款功能全面的外接程序,其中包括使用正则表达式查找和替换数据的功能。它会在 Excel 功能区新增选项卡,提供广泛的工具,包括正则相关功能。
- RegEx Find/Replace:这是一款允许您使用正则表达式查找和替换文本的 Excel 外接程序。它集成于 Excel,相比内置选项提供更强大的查找/替换功能。
- PowerGREP:虽然并非直接的 Excel 外接程序,但 PowerGREP 可处理 Excel 文件。它是 Windows 上功能强大的 grep 工具,能够对文本和二进制文件执行复杂的正则操作。它更像是独立应用,但可与 Excel 配合用于高级正则处理。不过其价格不菲:单用户许可证为 159 美元,100 用户许可证高达 5,300 美元。
部分外接程序可在 Excel 内通过插入选项卡 > 获取外接程序直接找到。
其他外接程序需要从外部来源下载,并按照其安装说明进行配置。
几点注意事项:
- 兼容性:确保外接程序与您的 Excel 版本和操作系统兼容。
- 安全性:仅从可信来源下载并安装外接程序。
- 功能需求:根据您需要完成的正则任务选择最合适的外接程序。
结语
在大多数情况下,Excel 的内置函数(如 FIND、SEARCH、REPLACE)就能满足 90% 的文本处理需求。但对于剩余 10% 的复杂字符串模式,正则表达式将大有裨益。想进一步了解如何在主流编程语言中应用正则表达式,可查看我们的课程:Python 正则表达式 和 R 语言进阶正则表达式。
若想全面掌握 Excel,请查看我们的Excel 基础技能路径,涵盖成为熟练用户所需的核心技能。

作者
Chloe Lubin
白天做数据分析,夜晚讲故事。我热衷于用自己的知识弥合数据素养鸿沟,帮助新手顺利转入这一领域。我的理念是每天都要学习,哪怕只有5分钟!
您是否曾需要将不同格式的电话号码统一标准化?或者从自由文本字段中提取关键词?这就是 RegEx 大显身手的时候!RegEx(Regular Expressions,正则表达式)是一种功能强大且灵活的模式,用于在文本中匹配字符串。本文将介绍常见的正则表达式语法、如何在 Excel 中启用正则表达式,以及如何高效地使用它们。
什么是正则表达式?
正则表达式(常缩写为 "regex" 或 "regexp")用于定义搜索模式,可用于搜索、解析和/或替换文本等各类文本处理任务。正则表达式广泛应用于编程、文本编辑器以及其他涉及模式匹配的软件中。Excel 中的正则表达式风格(语法)基于 .NET 正则表达式引擎。
常见的正则表达式要素
正则表达式可按其特性进行分组。以下是您将经常遇到的常见要素。
字面量字符
正则表达式可以包含与自身精确匹配的字面量字符。例如,正则 "
hello" 将与字符串 "hello" 精确匹配。元字符
正则表达式还包含具有特殊含义的元字符。常见元字符包括:
.(点):匹配除换行符外的任意单个字符。*:匹配前一个字符或分组出现零次或多次。+:匹配前一个字符或分组出现一次或多次。?:匹配前一个字符或分组出现零次或一次。|(竖线):充当逻辑 OR,用于指定可选项。()(括号):将字符或子模式分组在一起。[](方括号):定义字符类,匹配给定字符集合中的任一字符。^(脱字符):匹配一行或字符串的起始位置。$:匹配一行或字符串的结束位置。\(反斜杠):转义元字符以按字面含义匹配。字符类
正则表达式中的字符类是一种特殊记法,用于从一组字符中匹配任意一个字符。它们通过简洁的方式指定应匹配的字符集合,从而简化正则模式。您可以使用方括号
[...]来定义字符类。例如,[aeiou]匹配任一元音字母;[A-Z]匹配任一大写字母。量词
量词用于指定在目标字符串中某个模式、字符或字符类需要出现的次数,即应重复的次数。例如,
a{3}精确匹配连续三个字母 "a";ab?匹配 "a" 或 "ab"。锚点
锚点是特殊字符,本身不匹配任何具体字符,而是匹配字符之间、之前或之后的位置。它们用于确保正则模式出现在文本的特定位置。例如,^ 将模式锚定到字符串开头,$ 将其锚定到结尾。
修饰符
修饰符用于改变正则引擎解释模式的方式,借此调整匹配行为,提供更大的灵活性和控制力。修饰符会影响匹配过程的多个方面,如大小写敏感、多行匹配以及特殊字符的解释方式。例如,
i使模式大小写不敏感,g使其为全局匹配,从而匹配输入中的所有出现。正则表达式在 Excel 中的应用
RegEx 在多种场景下都很有用:
数据验证
大多数情况下,您需要先进行数据验证,以确保查看的是正确的信息。以电话号码为例:在美国,标准格式为(
###) ###-####)。但它们也可能被写成###-###-####, (+#) ### ### ####, ##########等形式。RegEx 可以帮助识别文件中的信息是否确实为电话号码。以下正则表达式将匹配 10 位电话号码,并可选匹配 1 到 2 位的国家代码:(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$。文本提取
传统电子表格软件往往难以解析长句。若要提取特定关键词,您可以使用 RegEx 来完成。比如,要从访谈记录中提取以单引号括起的书名,我们可以使用如下正则表达式:
'(.*?)'。文本处理
除了提取信息之外,您也可以对其进行转换与标准化,以便于报告。假设我们希望提取美国邮政编码(ZIP code)的前五位数字。我们可以使用正则表达式
^\d{5}来替换包含邮编的字段中的所有匹配实例。分词
分词是将文本拆分为独立的标记或单词的过程。可以使用正则模式来定义分词规则。例如,使用
\s+按空白字符拆分文本,或使用\W+按非单词字符(如标点符号)拆分。如需更多模式信息,请查看我们的Python 正则表达式速查表。