regex Python正则表达式匹配所有5位数字,但不能大于5位

cbjzeqam  于 2022-11-18  发布在  Python
关注(0)|答案(8)|浏览(228)

我尝试对分布在HTML网页中的5位数优惠券代码进行字符串匹配。例如,532322103240021等...我可以用[0-9]{5}处理任何5位数字符串的简单情况,尽管这也匹配6、7 8... n位数字。有人能建议我如何修改这个正则表达式,以匹配 * 只 * 5位数字吗?

q9rjltbz

q9rjltbz1#

>>> 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+" ")
wbgh16ku

wbgh16ku2#

如果不像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']
tez616oj

tez616oj3#

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

smtd7mpg

smtd7mpg4#

**注意:**使用\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']

但如果使用re.findall(r”\D(\d{5})\D”,s)输出:['56789','01234']\D无法处理逗号或任何连续输入数字
\B在这里是重要的部分,它匹配空字符串,但只在单词的结尾或开头。
更多文档:https://docs.python.org/2/library/re.html

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

This example使用\D,但它不能捕获所有的五位数。
This example使用\b捕获所有五位数字
干杯

5ssjco0h

5ssjco0h5#

一个非常简单的方法是匹配所有的数字组,比如r'\d+',然后在处理结果时跳过长度小于5个字符的所有匹配。

mqxuamgl

mqxuamgl6#

您可能希望在5位字符串前后匹配一个非数字字符,如[^0-9]([0-9]{5})[^0-9],然后捕获内部组(您想要的实际字符串)。

gc0ot86w

gc0ot86w7#

你可以试试

\D\d{5}\D

或者也许

\b\d{5}\b

我不知道python是如何处理行尾和空格的。
我相信^\d{5}$对您不起作用,因为您可能希望获得其他文本中某个位置的数字。

5us2dqdw

5us2dqdw8#

我使用的正则表达式更容易表达:

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

它将搜索5个数字,但你必须确保字符串中没有另外5个数字

相关问题