我有一个方程式,我在文件中输入了(((2+1)*(4+5))/2)
之类的内容。我正在寻找的是其中独特的数学表达式。
在这种情况下:
2+1
4+5
(2+1)*(4+5)
,最后是((2+1)*(4+5))/2
。
我首先看了这些How can I split a string of a mathematical expressions in python? 但是无法解决。.
可以帮忙吗?
答案 0 :(得分:2)
您可以通过遍历字符串来制作基本的解析器,并且每次找到开头括号时,将索引推入堆栈。找到圆括号后,弹出堆栈中的最后一个内容,然后从中切出一个片段:
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()
不起作用,或者完成后还剩下一些东西,则说明括号没有平衡-可以充实地进行错误检查。