在python中正确使用\ D?

时间:2013-08-19 10:26:29

标签: python regex

我有一些代码,我试图找到一组特定的数字。长度各不相同,我不希望它们在其他数字中找到。例如,以下代码:

reg="\D12345\D"
string="12345"
matchedResults = re.finditer(reg, string)

for match in matchedResults:
    print match.group(0)

如果数字本身就不起作用。但是如果我把它放在这里会有效:

string="a12345"

但这也将匹配不合需要的a。有更好的方法吗?

1 个答案:

答案 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')