【问题标题】:Python regex not giving me any matches [duplicate]Python正则表达式没有给我任何匹配项[重复]
【发布时间】:2017-10-05 19:26:45
【问题描述】:

我正在尝试在 python 中使用正则表达式匹配具有 5 位数字的数字。这是我的代码:

 import re
 matchstring = "These are 10101 random numbers 34345."
 regex_string = r'(?<!\d)\d{5}(?!\d)'
 all_matches = re.findall(matchstring, regex_string) 

我不知道为什么我应该得到 2 个匹配项时得到 0 个匹配项。我已经尝试在 2 个 python 验证器站点上使用这个正则表达式,并且在这两个站点上这些都有效。知道为什么在我的代码中我得到一个空列表吗?

【问题讨论】:

  • “原始”问题如何准确地询问 5 位数字,这真是不可思议......

标签: python regex


【解决方案1】:

函数re.findall按顺序接受参数:模式,然后是字符串:

re.findall(regex_string, matchstring)
['10101', '34345']

【讨论】:

  • 逆序:OP的顺序不对,不是findall
  • 我的意思是“为了与建议相反”:) 但是在不同的语言中可能有不同的顺序 - 所以很容易让人困惑。
【解决方案2】:

你可以试试这个:

import re
matchstring = "These are 10101 random numbers 34345."
final_numbers = [i for i in re.findall("\d+", matchstring) if len(i) == 5]

输出:

['10101', '34345']

【讨论】:

    【解决方案3】:
    import re
    matchstring = "These are 10101 random numbers 34345."
    regex_string = r"\b\d{5}\b"
    re.findall(regex_string , matchstring) 
    

    输出:

    ['10101', '34345']
    

    【讨论】:

    • 用最后的数字试试:"These are 10101 random numbers 34345"
    • 你也可以使用r"\b\d{5}\b"
    • 是的,更像是这样。
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多