在python中正确使用\D?

在python中正确使用\D?,python,regex,Python,Regex,我有一些代码,我试图找到一组特定的数字。长度各不相同,我不希望在其他数字中找到它们。例如,以下代码: reg="\D12345\D" string="12345" matchedResults = re.finditer(reg, string) for match in matchedResults: print match.group(0) 如果数字本身不起作用。但是,如果我提出以下建议,这将起作用: string="a12345" 但这也将匹配a,这是不可取的。有更好的方法吗

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

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

for match in matchedResults:
    print match.group(0)
如果数字本身不起作用。但是,如果我提出以下建议,这将起作用:

string="a12345"

但这也将匹配a,这是不可取的。有更好的方法吗?

使用零宽度负环视断言:

reg = r"(?<!\d)12345(?!\d)"

reg=r”(?我考虑过这个问题,但是如果数字前面有字符,我就找不到匹配项。例如,我希望它与前面的一个=匹配,不带空格。编辑:编辑后效果很好,谢谢。你能解释一下每个元素的含义吗(?@Martyn:我试图在我的答案中找到答案。正则表达式中的每个“语句”要么匹配一个字符(字面上或模式),要么匹配一个位置(锚定,如
^
$
\b
).Positive lookaround断言也与位置匹配,但仅当它们包含的模式在其位置之前或之后匹配时才匹配。@Martyn:例如,
(?=Asimov)
只匹配输入文本中文字
Asimov
后面的位置。只有当模式不匹配时,负环视才会匹配。@Martyn:不,
(?是整个运算符。它的正等价物是
(?给我们一些您想要匹配的字符串的示例please@Jayram\d和\d是不同的模式,因此不能重复
>>> 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')