import re
ip6 = "1234:0678:0000:0000:00cd:0000:0000:0000"
zeroes = re.search("(:?0000)+", ip6)
print zeroes.group(0)
:0000:0000
我正在尝试查找由冒号分隔的四个零的最长序列。字符串包含三个这样的组序列,但只有两个组被打印出来了。为什么呢?
编辑:它打印 :0000:0000 是因为那是字符串中的第一个匹配项 - 但是我认为正则表达式总是寻找最长匹配吗?
import re
ip6 = "1234:0678:0000:0000:00cd:0000:0000:0000"
zeroes = re.search("(:?0000)+", ip6)
print zeroes.group(0)
:0000:0000
我正在尝试查找由冒号分隔的四个零的最长序列。字符串包含三个这样的组序列,但只有两个组被打印出来了。为什么呢?
编辑:它打印 :0000:0000 是因为那是字符串中的第一个匹配项 - 但是我认为正则表达式总是寻找最长匹配吗?
更新回答以适用于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
如果您不依赖于正则表达式,您可以使用 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
我相信这可以被简化成更加优雅的形式,但我认为这传达了重点。
我正在使用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()