在Python中解析浮点数列表的正则表达式

1 投票
2 回答
1791 浏览
提问于 2025-04-16 23:52

在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 个回答

2

这是一个使用 str.split() 方法结合列表推导式的例子——我觉得这样写比用 map 更符合 Python 的风格,也更清晰。

>>> 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]
11

其实不需要用正则表达式。你只要用 string.split() 这个方法,不加任何参数,它就会把字符串按照空格分开,不管空格有多少个。

撰写回答