Python正则表达式匹配所有5位数字但没有更大

Bry*_*mas 24 python regex

我正在尝试将遍布HTML网页的5位数优惠券代码串起来.例如53232,21032,40021等...我能处理的5位与任何字符串比较简单的情况下[0-9]{5},虽然这也符合6,7,8,...,N数字.有人可以建议我如何修改这个正则表达式匹配5位数字?

Joh*_*ooy 40

>>> import re
>>> s="four digits 1234 five digits 56789 six digits 012345"
>>> re.findall(r"\D(\d{5})\D", s)
['56789']
Run Code Online (Sandbox Code Playgroud)

如果它们可以在最开始或最后发生,那么填充字符串比处理特殊情况更容易

>>> re.findall(r"\D(\d{5})\D", " "+s+" ")
Run Code Online (Sandbox Code Playgroud)

  • 我在我的答案中强调了正则表达式中 \D 和 \b 之间的区别。 (2认同)

Cra*_*ent 13

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

在一个字符串中: [^0-9][0-9]{5}[^0-9]


Xav*_*lle 12

如果没有为特殊情况的开始和结束字符串填充字符串,就像John La Rooy的回答一样,可以使用否定的lookahead和lookbehind来处理具有单个正则表达式的两种情况

>>> import re
>>> s = "88888 999999 3333 aaa 12345 hfsjkq 98765"
>>> re.findall(r"(?<!\d)\d{5}(?!\d)", s)
['88888', '12345', '98765']
Run Code Online (Sandbox Code Playgroud)


iga*_*rav 5

注意:使用会出现问题,\D因为\D匹配任何不是数字的字符,而是使用\b. \b在这里很重要,因为它匹配单词边界,但仅在单词的结尾或开头。

import re  

input = "four digits 1234 five digits 56789 six digits 01234,56789,01234"


re.findall(r"\b\d{5}\b", input)  

result : ['56789', '01234', '56789', '01234']
Run Code Online (Sandbox Code Playgroud)

但如果使用 re.findall(r"\D(\d{5})\D", s) output : ['56789', '01234'] \D 无法处理逗号或任何连续输入的数字。

\b 在这里很重要,它匹配空字符串,但只在单词的结尾或开头。

更多文档:https : //docs.python.org/2/library/re.html

关于\Dvs用法的更多说明\b

此示例使用\D但未捕获所有五位数字。

此示例\b在捕获所有五位数字时使用。

干杯