在Python中解析浮点数列表的正则表达式
在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()
这个方法,不加任何参数,它就会把字符串按照空格分开,不管空格有多少个。