0

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

  • 字符串长度为 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'

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

4

1 回答 1

2

\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}'
于 2013-11-11T20:39:54.977 回答