【问题标题】:Regex Expression to Find 5-Digit Code正则表达式查找 5 位代码
【发布时间】:2013-11-12 04:43:09
【问题描述】:

尝试根据以下条件查找模式匹配项:

  • 字符串长度为 5 个字符
  • 字符 [0] = 字母/数字
  • 字符 [1] = 字母
  • 字符 [2-4] = 数字

我不明白为什么“22222”适用于这个表达式?

 p = r'(\w|\d)(\w)(\d){3,}'
 m = re.match(p, "AA012")    # Works as expected
 --> 'AA012'

 m = re.match(p, "1A222")    # Works as expected
 --> '1A222'

 m = re.match(p, "22222")    # Does NOT work as expected!
 --> '22222'

我的正则表达式语法中缺少什么?

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    \w 匹配字母数字(以及下划线)。

    如果您想匹配个字母,请使用[a-zA-Z]

    r'\w[a-zA-Z]\d{3,}'
    

    匹配一个字母或数字(或下划线),然后是一个字母,然后是 3 个数字。

    演示:

    >>> import re
    >>> p = r'\w[a-zA-Z]\d{3,}'
    >>> re.match(p, "22222")
    >>> re.match(p, "AA012")
    <_sre.SRE_Match object at 0x105aca718>
    >>> re.match(p, "1A222")
    <_sre.SRE_Match object at 0x105aca780>
    >>> re.match(p, "_A222")
    <_sre.SRE_Match object at 0x105aca718>
    

    如果下划线有问题,请使用:

    r'[a-zA-Z\d][a-zA-Z]\d{3}'
    

    【讨论】:

    • 我猜你还需要锚点,因为字符串的长度总是 5。
    • facepalm 我需要更仔细地阅读文档!这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2016-07-15
    • 2013-07-02
    相关资源
    最近更新 更多