我需要一个正则表达式来分割数学表达式,例如:
-1*x+2*y
指向:-1*x
和2*y
我不能只根据+
和-
拆分该字符串(因为可能有负数)
答案 0 :(得分:3)
您可以在+
或-
上拆分,前面有字母,数字和可能在表达式中可接受的其他元素(例如,括号)。您可以使用look-behind来完成此操作。
例如在python中你可以这样做:
>>> import re
>>> re.split('(?<=[a-zA-Z0-9)])[+-]', '-a+10*x-2*y+(-2)-b')
['-a', '10*x', '2*y', '(-2)', 'b']
这会在每个+
或-
上分开,前面没有小写或大写字母或数字或右括号。您可能需要根据您对“数学表达式”的确切规范进行调整。
这个或类似的正则表达式应该适用于其他正则表达式引擎。
答案 1 :(得分:2)
Math表达式是解析器的经典应用程序。
正则表达不足以完成正确的工作。即使您可以滥用正则表达式库中的高级功能来强制使用解决方案,结果也可能会产生毛茸茸的结果。
答案 2 :(得分:0)
如果您总是在+
上拆分并且只在-
上拆分,如果它不在表达式的开头或者在'+'(和空格)之后会怎样?