Office 通配符模式(不是正则)
Word / Excel 的查找替换里勾选”使用通配符”后,支持的是简化版匹配规则,和标准正则不同:
| 通配符 | 含义 | 示例 |
|---|---|---|
* | 任意多个字符 | sh_* 匹配 sh_ 开头的所有内容 |
? | 单个任意字符 | sh_? 匹配 sh_ 加一个字符 |
[0-9] | 数字字符类 | 匹配一个数字 |
[A-Za-z] | 字母字符类 | 匹配一个字母 |
[!a-z] | 排除字符类 | 匹配不是 a-z 的字符 |
@ | 前一元素重复一次或多次(相当于 +) | [0-9]@ 匹配连续数字 |
\1 | 引用第一个捕获组 | 保留匹配部分 |
** 在 Office 里没有特殊含义,不会”更强匹配”,用一个 * 即可。
常用通配符替换示例
提取字母部分(去除数字):
查找: ([A-Za-z]*)([0-9]*)
替换: \1
\1 保留第一个括号里的内容(字母部分),丢弃数字。
匹配 sh_ 开头:
sh_*
* 匹配后面任意内容(包括空)。
只匹配 sh_ 后跟数字:
sh_[0-9]@
@ 在 Word 通配符里相当于正则的 +,表示重复一次或多次。
Word 删除多余空行:
查找: ^13^13
替换: ^13
^13 是 Word 里的段落标记(回车符),两个连续段落标记替换成一个即可删除空行。
VBA 调用真正的正则表达式
Excel 原生不支持正则,但可以通过 VBA 调用 VBScript.RegExp 引擎:
Function RegReplace(text As String, pattern As String, replacement As String) As String
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Global = True
re.IgnoreCase = False
re.Pattern = pattern
RegReplace = re.Replace(text, replacement)
End Function
保存后在单元格里直接用:
=RegReplace(A1,"\d+","")
这才是标准正则(支持 \d、\s、+、? 等)。
打开 VBA 编辑器:
- Excel →
Alt + F11 - 插入 → 模块
- 粘贴上面的函数
- 保存,回到工作表使用
Power Query(进阶)
Excel 内置 Power Query 的 M 语言支持部分文本处理:
// 提取所有数字
Text.Select([Column], {"0".."9"})
// 删除数字
Text.Remove([Column], {"0".."9"})
不如正则灵活,但不需要写 VBA,适合简单的批量清洗。
选择建议
| 场景 | 推荐方式 |
|---|---|
| 简单前缀/后缀匹配 | Word/Excel 通配符 |
标准正则(\d、\w、捕获组) | VBA + VBScript.RegExp |
| 大量数据批量清洗 | Power Query |
| 复杂逻辑处理后粘回 Excel | VS Code / Notepad++ 处理后导入 |
