Python的正则expression式 – 如何获得匹配的位置

如何使用re模块获得所有匹配的开始和结束位置? 例如,给定模式r'[az]'和string'a1b2c3d4'我希望得到它find每个字母的位置(理想情况下,我也想得到匹配的文本)。

 import re p = re.compile("[az]") for m in p.finditer('a1b2c3d4'): print m.start(), m.group() 

取自

正则expression式HOWTO

span()返回单个元组中的开始和结束索引。 由于匹配方法只检查RE是否匹配string的开头,所以start()将始终为零。 但是,RegexObject实例的search方法扫描整个string,所以在这种情况下匹配可能不会从零开始。

 >>> p = re.compile('[az]+') >>> print p.match('::: message') None >>> m = p.search('::: message') ; print m <re.MatchObject instance at 80c9650> >>> m.group() 'message' >>> m.span() (4, 11) 

结合:

在Python 2.2中,finditer()方法也可用,将一系列MatchObject实例作为迭代器返回。

 >>> p = re.compile( ... ) >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') >>> iterator <callable-iterator object at 0x401833ac> >>> for match in iterator: ... print match.span() ... (0, 2) (22, 24) (29, 31) 

你应该可以按顺序做一些事情

 for match in re.finditer(r'[az]', 'a1b2c3d4'): print match.span() 

对于Python 3.x

 from re import finditer for match in finditer("pattern", "string"): print(match.span(), match.group()) 

你应该得到\n分隔的元组(包括分别匹配的第一个和最后一个索引)和匹配本身,对于string中的每个命中。