繁体   English   中英

如何使用 python 拆分字符串中的代数表达式?

[英]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']

对于您的示例数据,您可以在加号或等号上拆分,或者在右侧断言不在字符串开头的减号时拆分。

[+=]|(?=(?<!^)-)
  • [+=]匹配+=
  • | 或者
  • (?=(?<!^)-)正向前瞻,断言右边是-但不是在字符串的开头

正则表达式演示| Python 演示


两个示例字符串的 Output

['-9x', '5x', '-2', '-4x', '5']
['-3x', '-5x', '2', '9x', '-9']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM