我有一个字符串,我想在VBA正则表达式中匹配一个中间括号,但不是两个。VBA正则表达式限制为单个字符
例如,“沙漠(蛋糕,派)”应该匹配,但是“沙漠(南瓜,糖果(蛋糕,派))”不应该匹配。
然而,这种模式匹配上述两种搜索字符串:
regex.Pattern = LCase("desert") & ".*\(.*" & searchString
有没有办法告诉它我只是一个只有一个匹配,并且如果有两个,那不好吗?我认为问题在于。*正在吞噬第二个。
我有一个字符串,我想在VBA正则表达式中匹配一个中间括号,但不是两个。VBA正则表达式限制为单个字符
例如,“沙漠(蛋糕,派)”应该匹配,但是“沙漠(南瓜,糖果(蛋糕,派))”不应该匹配。
然而,这种模式匹配上述两种搜索字符串:
regex.Pattern = LCase("desert") & ".*\(.*" & searchString
有没有办法告诉它我只是一个只有一个匹配,并且如果有两个,那不好吗?我认为问题在于。*正在吞噬第二个。
如果我正确理解您的示例,那么您可以使用简单的character class来实现此目的。
[^()]*\([^()]*\)
=>
regex.Pattern = LCase("desert") & [^()]*\([^()]*\) & searchString
...会寻找一个开口的括号,然后任意数量的非括号字符,接着闭合括号。由于模式在中间寻找非paren字符,因此您的要求应该得到满足。
是的,你只需要后,第一个把这件事告诉不匹配左括号:
regex.Pattern = LCase("desert") & ".*\([^\(]*" & searchString