Python正则表达式:匹配嵌套的括号

时间:2013-12-08 03:48:58

标签: python regex

假设我有一个包含子串的字符串

# the substrings and the whole string surrounded by parenthesis
string = '((substring1)(substring2))'

我想得到substring1& substring2使用正则表达式,但我遇到了问题:(

这就是我现在所拥有的:

match = re.search('(\(.*\))', string)
print match.groups()


问题是,结果显示:

('(substring1)(substring2)', )


似乎正则表达式只匹配第一个左括号和最后一个右括号..

换句话说,匹配的正则表达式就像..

(    match.....    )

而不是

(    (match1)(match2)   )

如何使正则表达式捕获INNER括号?

由于

1 个答案:

答案 0 :(得分:6)

>>> re.findall('\([^()]*\)', string)
['(substring1)', '(substring2)']

重要的是要注意,正则表达式无法处理任意级别的嵌套。这将找到最深层嵌套的项目,但如果你正在寻找更复杂的东西,你最好放弃正则表达式。