有没有办法采用正则表达式,例如
\(.*\)
并使其正确识别任何类型的括号对,如
(\(|\{|\[).*(\)|\}|\])
没有做出错误的匹配,例如\(.*\]
?
我专门使用Python,但它应该以任何语言工作。
答案 0 :(得分:2)
没有。常规语言无法正确处理嵌套。你需要一个合适的解析器。
答案 1 :(得分:0)
没有神奇的方法可以告诉正则表达式将特定字符与其他字符匹配(如果它是完全相同的字符/字符串,则可以进行反向引用,但事实并非如此)。
你能做的就是写一个"复杂的" (不是那么)表达:
((?:\(.*\))|(?:\{.*\})|(?:\[.*\]))
答案 2 :(得分:0)
((?:\([^()]*\))|(?:\{[^{}]*\})|(?:\[[^[\]]*\]))
更加笨拙,但与包含.*
的解决方案不同,这只会在嵌套括号的情况下捕获最内层的括号。在一对括号之间,除了括号本身[^{}]
之外,一切都是允许的,甚至是换行符。
.*
是贪婪的,它会将两对括号作为一组捕捉,如(ab)cd(ef),甚至混乱对并匹配(ab )cd)例如。
要捕获包含外部括号的组,例如(ab(cd)ef),我认为不可能使用正则表达式。