我有一个字符串,当有一个插入括号但不是两个时,我想在 VBA 正则表达式上匹配。
例如,“desert (cake, pie)”应该匹配,但“desert (pumpkin, sweets(cake, pie))”不应该匹配。
但是,此模式匹配上述两个搜索字符串:
regex.Pattern = LCase("desert") & ".*\(.*" & searchString
有没有办法告诉它我只有一个完全匹配,如果有两个,那就不好了?我认为问题是 .* 正在吞噬第二个。
如果我正确理解你的例子,那么你可以使用一个简单的字符类来实现这一点。
[^()]*\([^()]*\)
=>
regex.Pattern = LCase("desert") & [^()]*\([^()]*\) & searchString
...将寻找一个开始的括号,然后是任意数量的非括号字符,然后是一个结束的括号。由于该模式在中间寻找非括号字符,因此您的要求应该得到满足。
是的,你只需要告诉它在第一个括号之后不匹配左括号:
regex.Pattern = LCase("desert") & ".*\([^\(]*" & searchString