0

我正在尝试 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 呢?这个输出是怎么回事。如果有什么好处?

4

3 回答 3

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)
于 2013-06-05T13:48:46.963 回答
4

跨度很好地映射到切片上。即不包括结束索引

>>> ['12 drummers drumming, 11 '[slice(*i)] for i in ((0,2), (22,24))]
['12', '11']
于 2013-06-05T13:46:52.703 回答
1

查看 、和的文档,span()返回匹配开始和结束的元组。start()end()span()

对于 MatchObject m,返回 2 元组 (m.start(group), m.end(group))。请注意,如果组对匹配没有贡献,则为 (-1, -1)。group 默认为零,整个匹配。

start()并且end()是指示匹配子字符串存在位置的索引。

返回 group 匹配的子字符串的开始和结束的索引;group 默认为零(表示整个匹配的子字符串)。

所以match.span()将只返回那个元组。如果要显示实际匹配,请尝试match.group().

于 2013-06-05T13:49:10.760 回答