我试图用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>
替换为"\((?![\(\)])+\)"
(以排除括号内括号内出现的事件),但它似乎无法正常工作。
答案 0 :(得分:5)
不是将所有内容与.*
匹配,而是从该匹配中排除右括号字符:
>>> re.compile("\([^)]*\)").findall("(1 + 2) + (3 + 4)")
['(1 + 2)', '(3 + 4)']
看我正在使用
[^)]*
而不是
.*