【问题标题】:Regex Matching floating numbers in between commas正则表达式匹配逗号之间的浮点数
【发布时间】:2021-06-23 15:54:30
【问题描述】:

我有一个数据集如下

0,0 1868.37507375 -984.46051955 388.44592850 2 0    
    0,10 -7.0710700000e-01 -7.0710700000e-01 
        0.0000000000e+00 5.7735026919e-01 -5.7735026919e-01 5.77
0,11 7.0710700000e-01 7.0710700000e-01 0.0000000000e+00
    5.7735026919e-01 -5.7735026919e-01 5.35

我正在尝试在循环中编写一个正则表达式代码,以便它匹配 逗号之间的七个浮点数。如果正则表达式不匹配,则循环将移至下一组数字。 (除了第一个逗号之前的第一个数字是 0)

例如。 第一组数字将匹配到 5.77 b/c,5.77 之后的数据不包含逗号,而 5.77 是逗号之后的第七个数字。

下一组数字匹配到 5.35 b/c,数据在 5.35 之后缺少逗号,而 5.35 是逗号之后的第七个数字

Line 1: 0,0 1868.37507375 -984.46051955 388.44592850 2 0    
        0,10 -7.0710700000e-01 -7.0710700000e-01 0.0000000000e+00
        5.7735026919e-01 -5.7735026919e-01 5.77

Line 2: 0,11 7.0710700000e-01 7.0710700000e-01 0.0000000000e+00
        5.7735026919e-01 -5.7735026919e-01 5.35

我找到的最接近的答案是herehere。但最终并没有太大帮助。

我正在使用 Python 3.8.10

【问题讨论】:

    标签: regex


    【解决方案1】:

    这不是一件容易的事。我尽量解释我的正则表达式。

    (?<=,)\d+(\h+\-?\d+\.?\d*(e[+-]\d{2})?){6}  
    

    (?&lt;=,) -> 必须以逗号开头。
    \d+ -> 开头有数字。这意味着它匹配整数,而不是浮动。如果您也想将其更改为浮动,只需删除 stis 部分并将{6} 重写为{7}
    (\h+\-?\d+\.?\d*(e[+-]\d{2})?){6} -> 这匹配浮点数 6 次,从水平白色字符开始。
    @987654329 @ -> 这是水平白色字符 1 个或多个。
    \-? -> 这是“-”0 或 1 次。
    \d+ -> 这是 1 个或多个数字
    \.? -> 这是 1 或 0 "."
    \d* -> 这是 0 个或多个数字
    (e[+-]\d{2})?) -> 这是 e 部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多