Python finditer()输出混乱

时间:2013-06-05 13:42:38

标签: python regex

我正在尝试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? 什么是这个输出的交易。这有什么好处?

3 个答案:

答案 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()