我需要根据分隔符拆分数学表达式。分隔符为(
,)
,+
,-
,*
,/
,^
和空格。我提出了以下正则表达式
"([\\s\\(\\)\\-\\+\\*/\\^])"
还将分隔符保留在结果列表中(这是我想要的),但它也会产生空字符串""
元素,这是我不想要的。我很难使用正则表达式(不幸的是),所以我不确定是否可以避免这种情况。
以下是问题的一个示例:
>>> import re
>>> e = "((12*x^3+4 * 3)*3)"
>>> re.split("([\\s\\(\\)\\-\\+\\*/\\^])", e)
['', '(', '', '(', '12', '*', 'x', '^', '3', '+', '4',
' ', '', ' ', '', ' ', '', '*', '', ' ', '3', ')', '', '*', '3', ')', '']
有没有办法不通过修改我的正则表达式来产生那些空字符串?当然我可以使用例如过滤器删除它们,但是想法根本就不会产生它们。
修改
我还需要不包含空格。如果你能在这方面也提供帮助,那就太好了。
答案 0 :(得分:1)
您可以添加\w+
,删除\ s并执行findall:
import re
e = "((12*x^3+44 * 3)*3)"
print re.findall("(\w+|[()\-+*/^])", e)
输出:
['(', '(', '12', '*', 'x', '^', '3', '+', '44', '*', '3', ')', '*', '3', ')']
根据您的需要,您可以更改正则表达式:
e = "((12a*x^3+44 * 3)*3)"
print re.findall("(\d+|[a-z()\-+*/^])", e)
print re.findall("(\w+|[()\-+*/^])", e)
第一个认为12a
是后两个字符串:
['(', '(', '12', 'a', '*', 'x', '^', '3', '+', '44', '*', '3', ')', '*', '3', ')']
['(', '(', '12a', '*', 'x', '^', '3', '+', '44', '*', '3', ')', '*', '3', ')']
答案 1 :(得分:-1)
只需理解即可剥离/过滤它们。
result = [item for item in re.split("([\\s\\(\\)\\-\\+\\*/\\^])", e) if item.strip()]