findPython中所有正则expression式匹配的索引?

我parsing的string可以有任何数量的引用string(我正在parsing代码,并试图避免PLY)。 我想知道是否有一个子string被引用,并且我有子string索引。 我最初的想法是用refind所有的匹配,然后找出它们所代表的索引的范围。

似乎我应该使用正则expression式像\"[^\"]+\"|'[^']+' (我避免处理三重引用和此类string)当我使用findall ()我得到了匹配string的列表,这是有点不错,但我需要索引。

我的子string可能就像c一样简单,我需要弄清楚这个特定的c是否被实际引用。

提前致谢。

这是你想要的:( 源 )

 re.finditer(pattern, string[, flags]) 

返回一个遍历string中RE模式的所有非重叠匹配的MatchObject实例的迭代器。 string从左到右扫描,匹配按find的顺序返回。 空结果包含在结果中,除非他们触及另一场比赛的开始。

然后,您可以从MatchObjects获取开始和结束位置。

例如

 [(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]