我正在尝试编写一个从多项式表达式中提取数字的函数。
该功能定义如下:
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'] 。 为什么正则表达式找不到其他数字作为表达式的匹配? 在包含多项式表达式的字符串中返回数字的正确方法是什么?
答案 0 :(得分:0)
您的正则表达式会匹配前导+
或-
(如果有),而数字后面的word boundary将阻止您匹配评论中提到的x
。
如果您确实想要包含减号并且不想包含加号,那么您可以使用alternation匹配您不想要的和在组中捕获的内容。
<强>详情
(?:
非捕获组
[+-]?
匹配可选的+
或-
\d*\.\d*
匹配零个或多个数字,一个点和零个或多个数字|
或\+?(-?\d+)
匹配一个+并捕获一个可选的-
后跟一个或多个数字)
关闭非捕获组例如:
import re
def getNumbers(polynomial):
regex = re.compile(r"(?:[+-]?\d*\.\d*|\+?(-?\d+))")
return regex.findall(polynomial)
print(getNumbers('2x^3+4x^2+8x-16'))
那会给你:
[&#39; 2&#39;,&#39; 3&#39;,&#39; 4&#39;,&#39; 2&#39;,&#39; 8&#39;,& #39; -16&#39;]