我尝试对分布在HTML网页中的5位数优惠券代码进行字符串匹配。例如,53232、21032、40021等...我可以用[0-9]{5}处理任何5位数字符串的简单情况,尽管这也匹配6、7 8... n位数字。有人能建议我如何修改这个正则表达式,以匹配 * 只 * 5位数字吗?
53232
21032
40021
[0-9]{5}
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+" ")
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']
tez616oj3#
完整字符串:^[0-9]{5}$字符串内:[^0-9][0-9]{5}[^0-9]
^[0-9]{5}$
[^0-9][0-9]{5}[^0-9]
smtd7mpg4#
**注意:**使用\D会有问题,因为\D会匹配任何非数字得字符,请改用\b. \b在这里很重要,因为它只匹配单词得结尾或开头.
\D
\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捕获所有五位数字干杯
5ssjco0h5#
一个非常简单的方法是匹配所有的数字组,比如r'\d+',然后在处理结果时跳过长度小于5个字符的所有匹配。
r'\d+'
mqxuamgl6#
您可能希望在5位字符串前后匹配一个非数字字符,如[^0-9]([0-9]{5})[^0-9],然后捕获内部组(您想要的实际字符串)。
[^0-9]([0-9]{5})[^0-9]
gc0ot86w7#
你可以试试
\D\d{5}\D
或者也许
\b\d{5}\b
我不知道python是如何处理行尾和空格的。我相信^\d{5}$对您不起作用,因为您可能希望获得其他文本中某个位置的数字。
^\d{5}$
5us2dqdw8#
我使用的正则表达式更容易表达:
re.findall(r"\d{5}", mystring)
它将搜索5个数字,但你必须确保字符串中没有另外5个数字
8条答案
按热度按时间q9rjltbz1#
如果它们可以出现在字符串的开头或结尾,那么填充字符串要比处理特殊情况容易得多
wbgh16ku2#
如果不像John La Rooy答案中那样为特殊情况的字符串开头和结尾填充字符串,则可以使用否定的lookahead和lookbehind来通过单个正则表达式处理这两种情况
tez616oj3#
完整字符串:
^[0-9]{5}$
字符串内:
[^0-9][0-9]{5}[^0-9]
smtd7mpg4#
**注意:**使用
\D
会有问题,因为\D
会匹配任何非数字得字符,请改用\b
.\b
在这里很重要,因为它只匹配单词得结尾或开头.但如果使用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
捕获所有五位数字干杯
5ssjco0h5#
一个非常简单的方法是匹配所有的数字组,比如
r'\d+'
,然后在处理结果时跳过长度小于5个字符的所有匹配。mqxuamgl6#
您可能希望在5位字符串前后匹配一个非数字字符,如
[^0-9]([0-9]{5})[^0-9]
,然后捕获内部组(您想要的实际字符串)。gc0ot86w7#
你可以试试
或者也许
我不知道python是如何处理行尾和空格的。
我相信
^\d{5}$
对您不起作用,因为您可能希望获得其他文本中某个位置的数字。5us2dqdw8#
我使用的正则表达式更容易表达:
它将搜索5个数字,但你必须确保字符串中没有另外5个数字