我有一堆存储为字符串的数学表达式。这里有一个短的一个Python:将一个字符串划分为子字符串
stringy = "((2+2)-(3+5)-6)"
我想起来打破这个字符串转换为仅包含在每个“子括号短语”的信息的列表,所以(我敢肯定有一个更好的方式来短语。)我的收益率将是:
['2+2','3+5']
我有几个关于如何做到这一点的想法,但我一直运行到一个“好了,现在该怎么办”的问题。
例如:
for x in stringy:
substring = stringy[stringy.find('('+1 : stringy.find(')')+1]
stringlist.append(substring)
作品只是桃色返回2 + 2,但这就是尽可能去,我就如何通过移动其余完全消隐...
写的实际的解析器。 (使用[pyparsing](http://pyparsing.wikispaces.com/)或[Parsley](https://pypi.python.org/pypi/Parsley)或[ANTLR](http://www.antlr3.org /)或其他) – millimoose 2013-05-13 22:30:24
但是这个问题在O(n)中是可以解决的,因为它可以减少到常规语法的字问题,而解析器至少需要O(n^3),因为它需要无上下文语法。解析器可以写更多的代码 - 但确实是更清晰的... – 2013-05-13 22:34:53
你想要做什么,比如'((2 *(2 + 2)) - (3 + 5)-6)'?你应该得到2 *(2 + 2),2 + 2还是两者都不是? – abarnert 2013-05-13 22:36:27