【问题标题】:python Regex returns matched string, but also returns blanks where it could not match [duplicate]python Regex返回匹配的字符串,但也返回无法匹配的空格[重复]
【发布时间】:2023-03-31 17:31:01
【问题描述】:

这是我的输入字符串:

str = '32 -3.723 +98.6 .357 0.86'

我的正则表达式是:

print re.findall('[+-]?\d*\.?\d*',str)

它返回:

['32', '', '-3.723', '', '+98.6', '', '.357', '', '0.86', '']

我不明白为什么中间有这些空字符串。

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    我无法理解为什么所有这些缺失都介于两者之间

    您的正则表达式的所有元素都是可选的,这意味着正则表达式可以(并且确实)匹配空字符串。

    [+-]? - ZERO or one matches
    \d*   - ZERO or more matches
    \.?   - ZERO or one matches
    \d*   - ZERO or more matches
    

    在输入中的每个位置,正则表达式都会尝试找到最长的匹配项。比如这里

    '32 -3.723 +98.6 .357 0.86'
       ^
    

    最长的匹配是空字符串。

    有几种方法可以解决这个问题。与其试图将正则表达式硬塞到不匹配的空字符串中,我个人会在匹配后将它们过滤掉。

    【讨论】:

    • 感谢亲爱的 NPE 提供如此深刻的见解。在寻找原因的过程中,我的思绪陷入了困境,但失败了。顺便说一句,我还将在匹配后将它们过滤掉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2021-12-06
    相关资源
    最近更新 更多