同じインデックスから始まるが、異なる一致グループからのすべての重複する一致を取得することは可能ですか?
たとえば、「ABC」正規表現からパターン「(A)|(AB)」を探すと、次の一致が返されます。
(0,"A") および (0,"AB")
同じインデックスから始まるが、異なる一致グループからのすべての重複する一致を取得することは可能ですか?
たとえば、「ABC」正規表現からパターン「(A)|(AB)」を探すと、次の一致が返されます。
(0,"A") および (0,"AB")
1 つの可能性については、Evpok の回答を参照してください。質問の 2 番目の解釈は、同じ位置から同時にすべてのパターンに一致させたいということです。この場合、先読み式を使用できます。たとえば、正規表現
(?=(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
すべての(重複している場合でも)一致のリストを返します。各インデックスの一致は1つまでです。