我正在尝试将遍布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)
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)
注意:使用会出现问题,\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
关于\D
vs用法的更多说明\b
:
此示例使用\D
但未捕获所有五位数字。
此示例\b
在捕获所有五位数字时使用。
干杯
归档时间: |
|
查看次数: |
59044 次 |
最近记录: |