我正在尝试docs.python中提到的这段代码:
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> for match in iterator:
... print (match.span())
...
(0, 2)
(22, 24)
(29, 31)
其中p
被定义为
p = re.compile('\d+')
但是12,11和10都是两位数字。那么为什么它会显示0-2,22-24,29-31? 什么是这个输出的交易。这有什么好处?
答案 0 :(得分:4)
跨度很好地映射到切片上。即不包括最终指数
>>> ['12 drummers drumming, 11 '[slice(*i)] for i in ((0,2), (22,24))]
['12', '11']
答案 1 :(得分:4)
正如文件中所述:
span()返回包含(开始,结束)位置的元组 匹配
首选使用match.group
显示匹配内容:
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> for match in iterator:
print match.group(), match.span()
12 (0, 2)
11 (22, 24)
10 (29, 31)
答案 2 :(得分:1)
查看span()
,start()
和end()
的文档,span()
会返回匹配开头和结尾的元组。
对于MatchObject m,返回2元组(m.start(组),m.end(组))。请注意,如果group对匹配没有贡献,则为(-1,-1)。组默认为零,整个匹配。
start()
和end()
是指示匹配的子字符串存在位置的索引。
返回由group匹配的子字符串的开始和结束的索引; group默认为零(表示整个匹配的子字符串)。
所以match.span()
将返回该元组。如果您想显示实际匹配项,请尝试match.group()
。