从Python中的数学线性表达式中提取系数



给定一个字符串,其中包含一些名称可能未知的变量中的线性表达式,我想返回一个字典,该字典将变量名称作为关键字,将相应的系数作为值。

示例

输入:

s = "- x0 + 2 * x1 + 4 * x2 - 3 * y + z + 8"

输出:

{'x0': -1, 'x1': 2, 'x2': 4, 'y': -3, 'z': 1}

您可以使用类似([+-])?s*(?:(d+)s**s*)?([a-z]w*)的正则表达式。这里,第一部分(系数,包括*(是可选的,但只有符号和实际数字以及变量将被存储。然后,您可以将这些转换为dict.

>>> import re
>>> s = "- x0 + 2 * x1 + 4 * x2 - 3 * y + z + 8"
>>> p = r"([+-])?s*(?:(d+)s**s*)?([a-z]w*)"
>>> re.findall(p, s)
[('-', '', 'x0'),
('+', '2', 'x1'),
('+', '4', 'x2'),
('-', '3', 'y'),
('+', '', 'z')]
>>> {v: int(s+(c or '1')) for (s, c, v) in _ }
{'x0': -1, 'x1': 2, 'x2': 4, 'y': -3, 'z': 1}

正则表达式的分解:

  • ([+-])?s*:可选符号,后跟空格
  • (?:(d+)s**s*)?可选系数,后面跟着*和空格;只捕获实际数字
  • ([a-z]w*):变量的名称

最新更新