【发布时间】:2019-08-10 06:21:36
【问题描述】:
我正在尝试构建一个正则表达式来从字符串中解析多项式的系数。我以为我已经找到了解决方案,直到找到一个我怀疑格式错误的特定示例,它破坏了我的 RegEx。我也不确定我的解决方案是否最优雅。
以下是一些我需要解析的字符串示例:
polys = ['1x',
'3.8546E-27x^4-2.4333E-20x^3+5.1165E-14x^2+3.7718E-6x-6.1561E-1',
'6.13159E-3x+0.348',
'0.0100708x-40',
'6.103516E-3x',
'1E-6x',
'1.4846859E-6x',
'2435',
'2.7883E-27x^4-2.2164E-20x^3+5.8443E-14x^2+7.5773E-6x-1.3147E+']
我尝试的模式和匹配:
pattern = r'([\+\-]?\d+\.?\d+[Ee]?[\+\-]?\d*)[x\^\d+]?|([\+\-]?\d+\.?\d*[Ee]?[\+\-]?\d*)x'
for poly in polys:
coeffs = []
for match in re.finditer(pattern, poly):
groups = match.groups()
coeff = groups[0] if groups[0] is not None else groups[1]
coeffs.append(float(coeff))
print(coeffs)
这似乎对列表中除最后一个 poly 之外的所有多边形都有效,仅在转换为浮点数时失败。如果我将预期的 0 添加到 this 的末尾,那么结果如下,这就是我要寻找的结果。
[1.0]
[3.8546e-27, -2.4333e-20, 5.1165e-14, 3.7718e-06, -0.61561]
[0.00613159, 0.348]
[0.0100708, -40.0]
[0.006103516]
[1e-06]
[1.4846859e-06]
[2435.0]
[2.7883e-27, -2.2164e-20, 5.8443e-14, 7.5773e-06, -1.3147]
我可能会假设最后一个项目格式不正确,要么忽略或处理它,但我不禁认为有一个更好/更整洁的解决方案。
【问题讨论】:
-
根据您提供的输入,您的预期输出是什么?
-
好问题。我已修改问题以显示预期结果。