0

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

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

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

如果数字本身就不起作用。但是,如果我输入以下内容,这将起作用:

string="a12345"

但这也将匹配不受欢迎的 a。有一个更好的方法吗?

4

1 回答 1

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')
于 2013-08-19T10:27:37.180 回答