使用正则表达式来处理数学方程中的嵌套括号?

pur*_*ons 6 python regex

如果我有:

statement = "(2*(3+1))*2"
Run Code Online (Sandbox Code Playgroud)

我希望能够为我正在编写的数学读者在括号内处理多个括号.也许我会以错误的方式解决这个问题,但我的目标是递归地深入括号,直到没有,然后我会执行数学运算.因此,我首先要关注的是

"(2*(3+1))" 
Run Code Online (Sandbox Code Playgroud)

然后专注于

"(3+1)"
Run Code Online (Sandbox Code Playgroud)

我希望通过将焦点值分配给正则表达式的起始索引和正则表达式的结束索引来实现此目的.我还没弄清楚如何找到结束索引,但我更感兴趣的是首先匹配正则表达式

r"\(.+\)" 
Run Code Online (Sandbox Code Playgroud)

没有匹配.我希望它读作"一组括号中包含的任何一个或多个字符".有人可以解释为什么上面的表达式与python中的上述语句不匹配吗?

ste*_*eha 12

我喜欢正则表达式.我一直都在使用它们.

不要为此使用正则表达式.

您需要一个实际解析器来实际解析您的数学表达式.你可能想读这个:

http://effbot.org/zone/simple-top-down-parsing.htm

实际解析表达式后,遍历解析树并计算结果是微不足道的.

编辑:@Lattyware提出了pyparsing,这也应该是一个很好的方法,并且可能比上面发布的EFFBot解决方案更容易.

http://pyparsing.wikispaces.com

这是一个四函数代数表达式求值程序的pyparsing示例代码的直接链接:

http://pyparsing.wikispaces.com/file/view/fourFn.py