我有一些代码,我试图找到一组特定的数字。长度各不相同,我不希望它们在其他数字中找到。例如,以下代码:
reg="\D12345\D"
string="12345"
matchedResults = re.finditer(reg, string)
for match in matchedResults:
print match.group(0)
如果数字本身就不起作用。但是如果我把它放在这里会有效:
string="a12345"
但这也将匹配不合需要的a。有更好的方法吗?
答案 0 :(得分:1)
使用零宽度负向环视断言:
reg = r"(?<!\d)12345(?!\d)"
环视断言(lookbehind和lookahead)匹配位置,而不是字符;如果前面的文本或后面的文本分别与不匹配命名的模式,则否定断言仅匹配。
这意味着只匹配不后面或位于数字前面的位置;字符串的开头和结尾将用于此目的。
演示:
>>> import re
>>> reg = re.compile(r"(?<!\d)12345(?!\d)")
>>> reg.search('12345')
<_sre.SRE_Match object at 0x102981ac0>
>>> reg.search('-12345-')
<_sre.SRE_Match object at 0x102a51238>
>>> reg.search('0123456')
>>> reg.search('012345-')
>>> reg.search('-123456')