Python re.search() 不返回完整匹配组
import re
ip6 = "1234:0678:0000:0000:00cd:0000:0000:0000"
zeroes = re.search("(:?0000)+", ip6)
print zeroes.group(0)
:0000:0000
我正在尝试找出由冒号分隔的最长四个零的序列。这个字符串里有三个这样的组,但只打印了两个组。为什么呢?
补充说明:它打印的是:0000:0000,因为这是字符串中第一个匹配的结果——但我以为正则表达式总是寻找最长的匹配呢?
3 个回答
0
我正在使用 Python 2.7.3
你觉得用 re.finditer() 这个方法怎么样?
$ uname -r
3.2.0-4-amd64
#!/usr/bin/env python
import re
ip6 = "1234:0678:0000:0000:00cd:0000:0000:0000"
iters = re.finditer("(:?0000)+", ip6)
for match in iters:
print 'match.group() -> ',match.group()
2
如果你对正则表达式不太感冒,可以试试用 itertools.groupby
这个工具:
from itertools import groupby
ip6 = "1234:0678:0000:0000:00cd:0000:0000:0000"
longest = 0
for section, elems in groupby(ip6.split(':')):
if section == '0000':
longest = len(list(elems))
print longest # Prints '3', the number of times '0000' repeats the most.
# you could, of course, generate a string of 0000:... from this
我相信这个方法可以简化得更优雅一些,但我觉得这样已经能表达出重点了。
2
答案已更新,以适应Python 2.6版本:
p = re.compile('((:?0000)+)')
longestword = ""
for word in p.findall(ip6):
if len(word[0])>len(longestword):
longestword = word[0]
print longestword