如何为Word通配符查找编写规则匹配全部4种AMT格式字符串
问题原因
- 你使用的VBA原生
Range.Find方法的通配符规则不支持标准正则的|或运算符,且通配符语法和标准正则存在差异,无法直接实现多模式匹配 - 正则中的
.是匹配任意字符的元字符,要匹配字面量的点号需要转义为\. - 你写的
|两侧添加了多余空格,会被识别为需要匹配的内容,导致规则失效
解决方案
推荐使用VBScript正则对象实现匹配,无需手动引用库的晚绑定写法如下:
Sub MatchAMTString() Dim reg As Object, match As Object, matches As Object Dim findRange As Range, cell As Range ' 初始化正则对象 Set reg = CreateObject("VBScript.RegExp") With reg .Global = True ' 匹配全部符合规则的内容 .IgnoreCase = False ' 区分大小写,不需要的话可设为True ' 匹配所有4种格式的正则规则 .Pattern = "AMT\.\d{3}\.(?:\d{6}|\d{2}\.(?:\d{5,6}|\d{3}\.\d{3}))" End With ' 遍历你需要查找的范围 Set findRange = ActiveSheet.UsedRange ' 可替换为你指定的单元格范围 For Each cell In findRange If reg.Test(cell.Value) Then Set matches = reg.Execute(cell.Value) For Each match In matches ' 这里输出匹配到的内容,你可以根据需求修改为存入单元格/数组等逻辑 Debug.Print match.Value Next End If Next End Sub
规则说明
上述正则规则可以完全覆盖你需要的4种格式:
AMT\.匹配固定前缀AMT.\d{3}\.匹配第一段3位数字加后缀点- 后续分支分别匹配三种后缀规则:
\d{6}匹配6位数字,对应AMT.xxx.xxxxxx格式\d{2}\.\d{5,6}匹配2位数字加点加5-6位数字,对应前两种长后缀格式\d{2}\.\d{3}\.\d{3}匹配2位数字加两个3位数字段,对应AMT.xxx.xx.xxx.xxx格式
内容的提问来源于stack exchange,提问作者user16599218
相关产品推荐
相关产品推荐

