找到所有正则表达式匹配的索引?

时间:2010-08-19 07:14:57

标签: python regex

我正在解析其中可能包含任意数量的引用字符串的字符串(我正在解析代码,并试图避免PLY)。我想知道是否引用了子字符串,并且我有子字符串索引。我最初的想法是使用re来查找所有匹配项,然后找出它们所代表的索引范围。

似乎我应该使用re和\"[^\"]+\"|'[^']+'这样的正则表达式(我现在避免处理三重引号和这样的字符串)。当我使用findall()时,我得到一个匹配字符串的列表,这有点不错,但我需要索引。

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

3 个答案:

答案 0 :(得分:115)

这就是你想要的:(source

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

返回一个迭代器,在所有上面生成MatchObject实例   字符串中RE模式的非重叠匹配。字符串是   从左到右扫描,并按找到的顺序返回匹配。空   匹配包含在结果中,除非它们触及开头   另一场比赛。

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

e.g。

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

答案 1 :(得分:0)

这应该可以解决您的问题 pattern = r“(?=(\” [^ \“] + \” |'[[^'] +'))“

然后使用以下命令获取所有重叠的索引,

indicesTuple = [(re.finditer(pattern,input)中mObj的((mObj.start(1),mObj.end(1)-1))

答案 2 :(得分:0)

#获取所有事件的索引

S = input() # Source String 
k = input() # String to be searched
import re
pattern = re.compile(k)
r = pattern.search(S)
if not r: print("(-1, -1)")
while r:
    print("({0}, {1})".format(r.start(), r.end() - 1))
    r = pattern.search(S,r.start() + 1)