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

时间:2010-08-20 16:40:26

标签: python regex

我正在尝试将遍布HTML网页的5位数优惠券代码串联起来。例如,532322103240021等...我可以使用[0-9]{5}处理任何5位数字符串的简单情况,但这也匹配6,7 ,8 ... n位数字。有人可以建议我如何修改此正则表达式以匹配 5位数字?

7 个答案:

答案 0 :(得分:37)

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:10)

如果没有填充特殊情况的开始和结束字符串的字符串,就像在John La Rooy中一样,可以使用负数前瞻和后瞻来处理具有单个正则表达式的两种情况

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

答案 3 :(得分:3)

一种非常简单的方法是匹配所有数字组,例如r'\d+',然后在处理结果时跳过每个不超过五个字符的匹配。

答案 4 :(得分:3)

注意:使用\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&#34; \ D(\ d {5})\ D&#34;,s)     输出:[&#39; 56789&#39;,&#39; 01234&#39;] \ D无法处理逗号或任何连续输入的数字。

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

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

关于\D\b 的使用情况的更多说明:

This example使用\D,但它不会捕获所有五位数。

This example在捕获所有五位数时使用\b

干杯

答案 5 :(得分:1)

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

答案 6 :(得分:1)

你可以尝试

\D\d{5}\D

或者

\b\d{5}\b

我不确定python如何处理行尾和空格。

我相信^\d{5}$对您不起作用,因为您可能希望获得其他文本中的数字。