【问题标题】:REGEX in Python only matches exponentPython中的正则表达式只匹配指数
【发布时间】:2016-07-07 19:50:49
【问题描述】:

我正在从文件中读取一些行,我想将其匹配为浮点数, 这是一个最小的例子:

import re
regex="[-+]?[0-9]+\.?[0-9]+([eE][-+]?[0-9]+)?"
string="0.00000000000000000E0   0.00000000000000000E0   0.00000000000000000E0"´
print(re.findall(regex,string))

,这给了我

['E0', 'E0', 'E0']

而不是预期的

['0.00000000000000000E0', '0.00000000000000000E0', '0.00000000000000000E0'] 

【问题讨论】:

    标签: python regex


    【解决方案1】:

    将正则表达式更改为

    regex=r"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?"
                      ^          ^^
    

    关键是使用非捕获组而不是捕获组,这样findall 不必只返回捕获的文本(当模式中没有定义捕获组时,re.findall 将返回整个匹配的文本)。

    此外,始终使用原始字符串文字来定义正则表达式模式以避免任何其他误解。

    Python demo:

    import re
    regex=r"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?"
    string="0.00000000000000000E0   0.00000000000000000E0   0.00000000000000000E0"
    print(re.findall(regex,string))
    

    【讨论】:

    • 非常感谢,花费的时间超出了应有的时间:)
    • 感谢您的回答。如果其他人遇到与我相同的问题,当尝试匹配“1e-9”时,我只得到“-9”。为了也抓住这种情况,我不得不对正则表达式进行轻微修改: regex=r"[-+]?[0-9]+\.?[0-9]*(?:[eE][- +]?[0-9]+)?"
    猜你喜欢
    • 2016-08-30
    • 2016-07-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多