找到字符串中子串的小出现

时间:2016-04-22 09:39:21

标签: python regex

我试图用re(括号内容)解析一些数学表达式。

我试过这个:

>>> re.compile("\(.*\)").findall("(1 + 2) + (3 + 4)")
['(1 + 2) + (3 + 4)']

但我发现只有最大的发生,包括最后一个和第一个括号之间的内容。但我想只得到最小的。

我怎么能实现这个目标?

>>> re.compile(<expr>).findall("(1 + 2) + (3 + 4)")
['(1 + 2)', '(3 + 4')]

我已尝试将<expr>替换为"\((?![\(\)])+\)"(以排除括号内括号内出现的事件),但它似乎无法正常工作。

1 个答案:

答案 0 :(得分:5)

不是将所有内容与.*匹配,而是从该匹配中排除右括号字符:

>>> re.compile("\([^)]*\)").findall("(1 + 2) + (3 + 4)")
['(1 + 2)', '(3 + 4)']

看我正在使用

[^)]*

而不是

.*