【问题标题】:Regex for parsing list of floating numbers in python用于解析python中的浮点数列表的正则表达式
【发布时间】:2011-08-18 14:10:24
【问题描述】:

在 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) 并安全地恢复数字列表?

【问题讨论】:

    标签: python regex parsing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      str.split() 方法与列表理解一起使用的示例——比map 稍微更Pythonic,恕我直言,更清晰:

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

      【讨论】:

        猜你喜欢
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 2010-09-08
        • 2022-01-25
        相关资源
        最近更新 更多