首页 > 解决方案 > 获取数学方程中的表达式

问题描述

我有一个等式,我在一个类似的文件中得到(((2+1)*(4+5))/2)。我正在寻找的是其中不同的数学表达式。在这种情况下: 2+1 4+5 (2+1)*(4+5)最后((2+1)*(4+5))/2

我从查看这些开始我如何在 python 中拆分一串数学表达式? 但无法得出解决方案..

你能帮忙吗?

标签: pythonpython-2.7

解决方案


您可以通过遍历字符串来制作一个简单的解析器,每次找到左括号时,将索引推送到堆栈。当你找到一个右括号时,弹出堆栈中的最后一个东西,并从那里取出一个切片到你现在所在的位置:

stack = []
s = "(((2+1)*(4+5))/2)"
for i, c in enumerate(s):
    if c == "(":
        stack.append(i+1)
    if c == ")":
        f = stack.pop()
        print(s[f:i])

结果

2+1
4+5
(2+1)*(4+5)
((2+1)*(4+5))/2

如果pop()不起作用,或者完成后堆栈中还剩下一些东西,则说明您没有平衡括号——这可以充实以进行错误检查。


推荐阅读