是否可以获得所有重叠匹配,它们从相同的索引开始,但来自不同的匹配组?
例如,当我从“ABC”正则表达式中查找模式“(A)|(AB)”时,应该返回以下匹配项:
(0,"A") 和 (0,"AB")
是否可以获得所有重叠匹配,它们从相同的索引开始,但来自不同的匹配组?
例如,当我从“ABC”正则表达式中查找模式“(A)|(AB)”时,应该返回以下匹配项:
(0,"A") 和 (0,"AB")
对于一种可能性,请参阅 Evpok 的答案。您的问题的第二种解释可能是您希望从同一位置同时匹配所有模式。在这种情况下,您可以使用前瞻表达式。例如正则表达式
(?=(A))(?=(AB))
将为您提供所需的结果(即两种模式与组匹配的所有位置)。
更新:通过额外的说明,这仍然可以使用单个正则表达式来完成。您只需将上面的两个组都设为可选,即
(?=(A))?(?=(AB))?(?:(?:A)|(?:AB))
不过我不建议这样做。您可以更轻松地分别查找每个模式,然后再加入结果。
string = "AABAABA"
result = [(g.start(), g.group()) for g in re.compile('A').finditer(string)]
result += [(g.start(), g.group()) for g in re.compile('AB').finditer(string)]
我明白了,虽然我不记得在哪里或从谁那里
def myfindall(regex, seq):
resultlist = []
pos = 0
while True:
result = regex.search(seq, pos)
if result is None:
break
resultlist.append(seq[result.start():result.end()])
pos = result.start() + 1
return resultlist
它返回所有(甚至重叠)匹配的列表,每个索引的匹配限制不超过一个。