Python:将一个字符串划分为子字符串
问题描述:
我有一堆存储为字符串的数学表达式。这里有一个短的一个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,但这就是尽可能去,我就如何通过移动其余完全消隐...
答
一种方法使用正则表达式:
import re
stringy = "((2+2)-(3+5)-6)"
for exp in re.findall("\(([\s\d+*/-]+)\)", stringy):
print exp
输出
2+2
3+5
答
你可以使用正则表达式如下所示:
import re
x = "((2+2)-(3+5)-6)"
re.findall(r"(?<=\()[0-9+/*-]+(?=\))", x)
结果:
['2+2', '3+5']
答
答案和问题,正则表达式可以在类似的问题上找到:Regular Expression to match outer brackets
+0
大量阅读材料 - 谢谢您链接到更多信息! – user2113818 2013-05-13 22:41:27
写的实际的解析器。 (使用[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