Excel VBA正则表达式:匹配非成对双引号的实现方法
Excel VBA正则匹配:包含未成对双引号(忽略连续成对的)的字符串
要实现你的需求,核心是匹配那些存在**奇数个连续"**的字符串(比如1个、3个这类无法完全成对的连续序列),同时排除全是连续成对"或完全没有"的情况。
你之前的表达式错误地排除了所有包含""的内容,导致连3个、5个这类包含成对但仍有单个剩余的情况也被过滤了。正确的正则可以用负向预查来实现:
^(?!(?:[^"]|"")*$).*$
表达式解释
(?!...):负向预查,用来直接排除不符合条件的字符串(?:[^"]|"")*:匹配任意数量的「非"字符」或者「连续两个"」- 整个预查逻辑是:如果整个字符串只能由非
"字符或连续成对的"组成,则不匹配;反之,只要存在至少一处无法成对的"序列,就会匹配。
VBA代码示例
Sub MatchUnpairedQuotes() Dim regEx As Object Dim testStrings As Variant Dim str As Variant Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "^(?!(?:[^"]|"")*$).*$" regEx.Global = False ' 仅判断整个字符串是否符合规则,无需全局匹配 testStrings = Array( _ "123"456", _ "123"456"789", _ "123"""456"""789", _ "123""456", _ "123""456""789", _ "123456789" _ ) For Each str In testStrings Debug.Print str & " -> " & regEx.Test(str) Next str End Sub
运行这段代码后,前三个目标字符串会返回True,后三个不符合要求的字符串返回False,完全匹配你的需求。
补充说明
如果你的场景中是直接匹配实际双引号(而非HTML转义的"),只需把表达式里的"替换为",同时注意VBA中双引号需要转义为两个连续双引号,最终Pattern写成:
regEx.Pattern = "^(?!(?:[^""]|""""))*$.*$"
内容的提问来源于stack exchange,提问作者Chiting
相关产品推荐
相关产品推荐

