Python正则表达式匹配所有五位数字但不包括更大的数字

35 投票
8 回答
110320 浏览
提问于 2025-04-16 03:05

我正在尝试在一个HTML网页中找到5位数的优惠券代码,比如532322103240021等等。我可以用[0-9]{5}来处理任何5位数字的简单情况,但这个方法也会匹配到6位、7位、8位等更多位数的数字。有没有人能建议我怎么修改这个正则表达式,使它匹配5位数的数字呢?

8 个回答

16

完整字符串: ^[0-9]{5}$

字符串中的部分: [^0-9][0-9]{5}[^0-9]

这里的内容是关于字符串匹配的规则。第一个例子表示一个完整的字符串,它要求这个字符串必须是5个数字,并且不能有其他字符。比如“12345”就是符合这个规则的。

第二个例子则是说在一个更长的字符串中找5个数字,这5个数字前后都不能是数字。也就是说,数字的前面和后面必须是其他字符,比如字母或符号。比如在“abc12345xyz”中,12345就符合这个规则,因为它前面是字母,后面也是字母。

22

在处理字符串的特殊情况,比如字符串的开头和结尾时,如果不想给字符串加上额外的空白,可以像John La Rooy所说的那样,使用负向前瞻和负向后顾来用一个正则表达式同时处理这两种情况。

>>> import re
>>> s = "88888 999999 3333 aaa 12345 hfsjkq 98765"
>>> re.findall(r"(?<!\d)\d{5}(?!\d)", s)
['88888', '12345', '98765']
52
>>> import re
>>> s="four digits 1234 five digits 56789 six digits 012345"
>>> re.findall(r"\D(\d{5})\D", s)
['56789']
>>> re.findall(r"\D(\d{5})\D", " "+s+" ")

如果这些情况可能发生在字符串的开头或结尾,那么给字符串加点空白比处理特殊情况要简单得多。

撰写回答