我正在尝试用 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>与 "\((?![\(\)])+\)" (排除括号内有括号的事件)但它似乎不起作用。
请您参考如下方法:
不是用 .* 匹配所有内容,而是从匹配中排除右括号字符:
>>> re.compile("\([^)]*\)").findall("(1 + 2) + (3 + 4)")
['(1 + 2)', '(3 + 4)']
看我在用
[^)]*
代替
.*
