Python正则表达式匹配所有五位数字但不包括更大的数字
我正在尝试在一个HTML网页中找到5位数的优惠券代码,比如53232
、21032
、40021
等等。我可以用[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+" ")
如果这些情况可能发生在字符串的开头或结尾,那么给字符串加点空白比处理特殊情况要简单得多。