1

テキストが与えられた場合、各文字が両側に正確に(編集された) 3つの大文字を持っているかどうかを確認し、ある場合は、そのような文字の文字列に追加します。

私は次のように書きました: m = re.match("[A-Z]{3}.[A-Z]{3}", text) (text= "AAAbAAAcAAA"としましょう)

マッチオブジェクトに「AAAbAAA」と「AAAcAAA」​​の2つのグループを取得することを期待していました

今、私が呼び出すm.group(0)と、正しい「AAAbAAA」が表示されます。しかし、を呼び出すm.group(1)と、そのようなグループは存在しないことがわかります。つまり、「AAAcAAA」​​は一致しませんでした。なんで?

また、を呼び出すm.groups()と、一致のタプルを取得する必要がありますが、空のタプルを取得します。つまり、私の場合は、「AAAbAAA」のタプルを取得する必要があります。なぜそれが機能しないのですか?

4

2 に答える 2

4

パターンにグループがありません。グループ内の何かをキャプチャするには、括弧で囲む必要があります。

([A-Z]{3}).[A-Z]{3}

例外はm.group(0)で、常に一致全体が含まれます。

あなたの質問を見ると、実際にはキャプチャ グループを探しているのではなく、重複する一致を探しているようです。正規表現では、グループとは、後で使用するために取っておく一致の小さな部分を意味します。たとえば、電話番号を次のようなものと照合しようとしている場合

([0-9]{3})-([0-9]{3}-[0-9]{4})

市外局番はgroup(1)、ローカル部分はgroup(2)、全体は になりますgroup(0)

あなたが望むのは、重複する一致を見つけることです。これは、Python regexで重複一致を行う方法を説明するスタック オーバーフローの回答です。キャプチャ グループと正規表現全般に関する私のお気に入りのリファレンスは次のとおりです。

于 2012-05-25T17:25:14.143 に答える
2

1つは、使いmatchたいときに使用していますfindall。囲まれている大文字のトリプレットは取得しre.findall('[A-Z]{3}([a-z])(?=[A-Z]{3})', search_string)ませんが、両側が 3 つの大文字で囲まれた単一の小文字をすべて取得します。

于 2012-05-25T17:25:03.027 に答える