在Python中使用异常分隔符从格式化的字符串中提取数字

时间:2019-02-26 23:56:08

标签: python string parsing

如何在Python中使用以下格式的字符串获取数字?它包含定界符的混合组合,例如tabparenthesiscmspace#

我使用了以下代码,但是它不能正确分割数字。

s = "1.0000e+036 (1.2365e-004,6.3265e+003cm) (2.3659e-002, 2.3659e-002#)"
parts = re.split('\s|(?<!\d)[,.](?!\d)', s)
print(parts)
['1.0000e+036', '(1.2365e-004,6.3265e+003cm)', '(2.3659e-002,', '2.3659e-002#)']

我正在尝试提取:

[1.0000e+036, 1.2365e-004, 6.3265e+003, 2.3659e-002, 2.3659e-002]

有人可以帮忙吗?

更新

我尝试了如下正则表达式,但未能将正指数分解

s = "1.0000e+036 (1.2365e-004,6.3265e+003cm) (2.3659e-002, 2.3659e-002#)"
match_number = re.compile('-?\ *[0-9]+\.?[0-9]*(?:[Ee]\ *-?\ *[0-9]+)?')
final_list = [float(x) for x in re.findall(match_number, s)]
print(final_list)
[1.0, 36.0, 0.00012365, 6.3265, 3.0, 0.023659, 0.023659]

可以看出,第一个数字是1e36,它被解析为两个数字1.036.0

1 个答案:

答案 0 :(得分:0)

您无需将这些项目视为定界符。相反,您似乎只需要一个正则表达式来提取行中的所有浮点数(包括指数/工程符号),而只需忽略其余字符即可。通过简单的搜索,即可轻松获得全面的数值表达式。