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
或 ()()
.
是否可以像()一样匹配括号但不允许嵌套?换句话说,我希望我的正则表达式匹配 () 但不匹配 (()) 我正在尝试的正则表达式是
\(\[^\(\)])
但它似乎不起作用。有人可以向我解释我做错了什么吗?
如果 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
或 ()()
.