9

同じインデックスから始まるが、異なる一致グループからのすべての重複する一致を取得することは可能ですか?

たとえば、「ABC」正規表現からパターン「(A)|(AB)」を探すと、次の一致が返されます。

(0,"A") および (0,"AB")

4

2 に答える 2

6

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)]
于 2011-05-23T18:17:54.807 に答える
3

どこから、誰からか思い出せないけど、これはもらえる

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つまでです。

于 2011-05-23T17:45:05.013 に答える