是否可以匹配像()这样的括号但不允许嵌套?换句话说,我希望我的正则表达式匹配()而不是(()) 我正在尝试的正则表达式是
\(\[^\(\)])
但它似乎没有用。有人可以向我解释我做错了吗?
答案 0 :(得分:2)
如果(foo)
中的x(foo)x
匹配,但(foo)
中的((foo))
不匹配,则正则表达式无法满足您的要求,因为正则表达式代表常规语法和all regular grammars are context free。但上下文(或“州”,Jonathon Reinhart called it in his comment)对于区分(foo)
和x(foo)x
中的((foo))
子字符串是必要的。
如果您只想匹配仅由带括号的子字符串组成的字符串,而在该子字符串中没有任何括号(匹配或不匹配),则以下正则表达式将执行:
^\([^()]*\)$
^
和$
分别将模式粘贴到字符串的开头和结尾,从而排除部分匹配*
)。[
如何启动字符集不会被转义,因为我们实际上想要它的特殊含义,而不是字面含义最后两点可能特定于Python使用的正则表达式的方言。
因此,这将完全匹配()
和(foo)
,但不会(甚至不是部分地)匹配(foo)bar)
,(foo(bar)
,x(foo)
,(foo)x
或()()
。