[英]How to split algebraic expressions in a string using python?
例如,我得到以下输入:
-9x+5x-2-4x+5
我需要得到以下列表:
['-9x', '5x', '-2', '-4x', '5']
这是我的代码,但我不知道如何处理缺点。
import re
text = '-3x-5x+2=9x-9'
text = re.split(r'\W', text)
print(text)
警告:我不能使用除 re 和 math 之外的任何库。
您可以re.findall
所有后跟+
或-
(或字符串结尾$
)的字符组,然后从子字符串中strip
+
(与-
一样,它仍然是以下组的一部分)。
>>> s = "-9x+5x-2-4x+5"
>>> [x.strip("+") for x in re.findall(r".+?(?=[+-]|$)", s)]
['-9x', '5x', '-2', '-4x', '5']
同样,对于带有=
的第二个字符串,将其添加到字符组并将其从子字符串中剥离:
>>> s = '-3x-5x+2=9x-9'
>>> [x.strip("+=") for x in re.findall(r".+?(?=[+=-]|$)", s)]
>>> ['-3x', '-5x', '2', '9x', '-9']
或者在通过=
拆分后将原始理解应用于子字符串,具体取决于结果的样子:
>>> [[x.strip("+") for x in re.findall(r".+?(?=[+-]|$)", s2)] for s2 in s.split("=")]
>>> [['-3x', '-5x', '2'], ['9x', '-9']]
事实上,现在我想到了,你也可以findall
所有匹配一个可选的减号,后跟一些数字和一个可选的x
,有或没有先用=
分割:
>>> [re.findall(r"-?\d+x?", s2) for s2 in s.split("=")]
[['-3x', '-5x', '2'], ['9x', '-9']]
许多可能的方法之一:
import re
term = "-9x+5x-2-4x+5"
rx = re.compile(r'-?\d+[a-z]?')
factors = rx.findall(term)
print(factors)
这产生
['-9x', '5x', '-2', '-4x', '5']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.