Python 正则表达式匹配括号但不匹配嵌套括号

Python Regex match parenthesis but not nested parenthesis

是否可以像()一样匹配括号但不允许嵌套?换句话说,我希望我的正则表达式匹配 () 但不匹配 (()) 我正在尝试的正则表达式是

\(\[^\(\)])

但它似乎不起作用。有人可以向我解释我做错了什么吗?

如果 x(foo)x 中的 (foo) 应该被匹配,而 ((foo)) 中的 (foo) 不匹配,你想要的用正则表达式是不可能的,因为正则表达式代表正则语法和 all regular grammars are context free. But context (or 'state', as ) 是区分 x(foo)x((foo)).

中的 (foo) 子字符串所必需的

如果您只想匹配 由带括号的子字符串组成的字符串,该子字符串中没有任何括号(匹配或不匹配),则可以使用以下正则表达式:

^\([^()]*\)$
  • ^$ 'glue' 分别将模式添加到字符串的开头和结尾,从而排除部分匹配项
  • 注意括号内非括号字符的任意重复次数 (…*)。
  • 请注意 字符集中,特殊字符是如何不转义的,但仍具有其字面含义。 (在那里放置反斜杠会在字符集中放置 文字反斜杠 。或者在这种情况下,由于否定,在字符集中。)
  • 注意 [ 开始的字符集是如何不转义的,因为我们实际上想要它的特殊含义,而不是字面意思

最后两点可能特定于 Python 使用的正则表达式方言。

所以这将完全匹配 ()(foo),但不会(甚至部分)(foo)bar)(foo(bar)x(foo)(foo)x()().