VBA中正则表达式无法匹配多段内容的原因及解决方法
问题原因
VBA内置的RegExp对象默认关闭全局匹配模式,仅返回第一个符合规则的匹配结果,这就是你代码只能拿到第一段内容的核心原因。
修正方案
只需要在正则配置部分新增.Global = True开启全局匹配即可,完整可运行代码如下:
' 注意使用前请先在VBA编辑器的「工具-引用」中勾选「Microsoft VBScript Regular Expressions 5.5」 Message = ":16R:SECM :22H::CRDB//DEBT :35B:IS 123!!! :98A::YD//2021097 :16S:SECM :16R:SECM :98A::POST//2021027 :98A::YD//2021097 :16S:SECM" Dim mRegExp As RegExp Set mRegExp = New RegExp count_num = 0 With mRegExp .Pattern = ":16R:SECM[\s\S]+?:16S:SECM" .Global = True ' 开启全局匹配,返回所有符合条件的结果 .IgnoreCase = False ' 当前场景首尾标记大小写固定,关闭即可 Set matchs = .Execute(Message) For Each matchpart In matchs MsgBox matchpart.Value count_num = count_num + 1 Next MsgBox count_num ' 最终输出为2,匹配两段内容 End With
内容的提问来源于stack exchange,提问作者yyy991
相关产品推荐
相关产品推荐

