我有一堆存儲爲字符串的數學表達式。這裏有一個短的一個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