【发布时间】:2018-10-16 00:27:36
【问题描述】:
我正在尝试编写一个从多项式表达式中提取数字的函数。
函数定义如下:
def getNumbers(polynomial):
regex = re.compile(r"[+-]?(?<!\.)\b[0-9]+\b(?!\.[0-9])")
numbers = []
i = 0
for match in regex.finditer(polynomial):
numbers.append(match.group(i))
i+=1
return numbers
我用以下方法测试了这个函数:
In [139]: getNumbers('2x^3+4x^2+8x-16')
Out[139]: ['3', '2', '-16']
在这种情况下,函数应该输出 ['2', '3', '4', '2', '8', '-16']。 为什么正则表达式没有找到其他数字作为表达式的匹配项? 返回包含多项式表达式的字符串中的数字的正确方法是什么?
【问题讨论】:
-
您需要在单词边界内匹配 1+ 个数字。因此,
2不能在2x中匹配(与4和8的情况相同)。试试r"[+-]?(?<![\d.])[0-9]+(?!\.?[0-9])" -
如果您允许使用分数,为什么不直接使用
[+-]?\d+或[+-]?\d+(?:\.\d+)?? -
为什么不减少到
(-?\d+)(?:[^\d]|$)。
标签: regex python-3.x polynomials