用于解析python中浮点数列表的正则表达式

时间:2011-08-18 14:10:25

标签: python regex parsing

在python中解析由空格分隔的浮点数列表的最佳原因是什么?

我有这样的行将来自一个来源:

string = "  4    1.6  8.29   0   0  3.55e-15 -1.28e-13   " 

使用未知数量的空格分隔数字以及字符串的开头或结尾。

当我能保证数字之间只有一个空格,并且字符串的开头或结尾没有空格时,我通常只使用numbers = map(float, string.split(" "))。我不熟练使用正则表达式,但有人建议我使用re.split("\s+", string),但这不起作用,因为有时我在结果列表的开头有空字符串。

我现在正在使用:re.split("\s+")但这不起作用,因为有时我在结果列表的开头有空字符串。

我现在正在使用:

res = map(float, re.findall("\d+\S*\d*", string)

这是以某种方式工作,但对我来说看起来很脆弱和丑陋。它可以匹配许多无法生成数字的字符串。

什么是最好的正则表达式模式,它总是匹配带有或不带指数表示法的整数和浮点数,以便我可以使用re.findall(patt, string)并安全地恢复数字列表?

2 个答案:

答案 0 :(得分:11)

不需要正则表达式。只需使用string.split(),无需任何参数;它会分裂在任何数量的空白上。

答案 1 :(得分:2)

str.split()方法与列表理解结合使用的示例 - 比map更温和地使用Pythonic和IMHO更清晰:

>>> string = "  4    1.6  8.29   0   0  3.55e-15 -1.28e-13   "
>>> floats = [float(x) for x in string.split()]
>>> floats
[4.0, 1.6000000000000001, 8.2899999999999991, 0.0, 0.0, 3.5500000000000001e-15,
 -1.2800000000000001e-13]