我必须根据所有括号字符串应拆分的条件将字符串拆分为子字符串列表。
假设我有(9+2-(3*(4+2)))
,那么我应该(4+2)
,(3*6)
和(9+2-18)
。
基本目标是我先了解哪个内括号将被执行然后再执行。
请帮忙......
如果您可以使用re模块建议方法,将会很有帮助。就这样,这对每个人来说都不是功课,我理解波兰语。我正在寻找的是利用Python和re模块的强大功能在更少的代码行中使用它。
非常感谢....
答案 0 :(得分:4)
eval是不安全的,所以你必须检查输入字符串是否有危险的东西。
>>> import re
>>> e = "(9+2-(3*(4+2)))"
>>> while '(' in e:
... inner = re.search('(\([^\(\)]+\))', e).group(1)
... e = re.sub(re.escape(inner), eval('str'+inner), e)
... print inner,
...
(4+2) (3*6) (9+2-18)
答案 1 :(得分:1)
尝试这样的事情:
import re
a = "(9+2-(3*(4+2)))"
s,r = a,re.compile(r'\([^(]*?\)')
while('(' in s):
g = r.search(s).group(0)
s = r.sub(str(eval(g)),s)
print g
print s
答案 2 :(得分:0)
这听起来非常作业,所以我会回复一些好的阅读,这可能会让你走上正确的道路。看看http://en.wikipedia.org/wiki/Polish_notation。这不完全是你想要的,但理解会让你非常接近答案。
答案 3 :(得分:0)
我不知道你想要做什么,但如果你想添加其他操作,如果你想对表达式有更多的控制权,我建议你使用解析器
http://www.dabeaz.com/ply/< - ply,例如