我试图找到一种方法来有效地将系数从包含符号多项式的字符串中提取出来,并将它们放入一个列表中,其中幂是指数。例如,一个字符串
x^10+6x^4-5x^2+x-11
将是列表
[-11, 1, -5, 0, 6, 0, 0, 0, 0, 0, 1]
我目前正在尝试学习正则表达式来处理它,但我对它的理解还不足以激发对其稳健性的信心(显然,逻辑告诉我并非如此)。谁能让我走上解决这个问题的正确轨道?
我试图找到一种方法来有效地将系数从包含符号多项式的字符串中提取出来,并将它们放入一个列表中,其中幂是指数。例如,一个字符串
x^10+6x^4-5x^2+x-11
将是列表
[-11, 1, -5, 0, 6, 0, 0, 0, 0, 0, 1]
我目前正在尝试学习正则表达式来处理它,但我对它的理解还不足以激发对其稳健性的信心(显然,逻辑告诉我并非如此)。谁能让我走上解决这个问题的正确轨道?
模式 r'-?\d*x\^\d+|-?\d+x?|-?x'
应该将字符串分开。
例如:
import re
string = "x^10+6x^4-5x^2+x-11"
pattern = re.compile(r'-?\d*x\^\d+|-?\d+x?|-?x')
matches = pattern.findall(string)
# matches == ['x^10', '6x^4', '-5x^2', 'x', '-11']
其余的应该是可行的。我把它留给读者作为练习。
这是一种将等式解析为具有自记录键的字典列表的方法。这种方法在精神上类似于 Jmac 的非常好的答案。
eq = 'x^10+6x^4-5x^2+x-11'
patt = r'(?P<sign>[-+]?)(?P<coeff>\d*)(?P<x>x?)(?:\^(?P<exp>\d+))?'
rgx = re.compile(patt)
eq_parts = [m.groupdict() for m in rgx.finditer(eq)][0:-1]
for eqp in eq_parts:
print eqp
输出:
{'x': 'x', 'coeff': '', 'exp': '10', 'sign': ''}
{'x': 'x', 'coeff': '6', 'exp': '4', 'sign': '+'}
{'x': 'x', 'coeff': '5', 'exp': '2', 'sign': '-'}
{'x': 'x', 'coeff': '', 'exp': None, 'sign': '+'}
{'x': '', 'coeff': '11', 'exp': None, 'sign': '-'}