ホームページ >バックエンド開発 >Python チュートリアル >Python の「re.findall()」を使用して重複する一致を見つけるにはどうすればよいですか?

Python の「re.findall()」を使用して重複する一致を見つけるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 16:40:13648ブラウズ

How Can I Find Overlapping Matches Using Python's `re.findall()`?

正規表現における重複一致を理解する

デフォルトでは、Python の re モジュールの findall() メソッドは文字列内の重複一致をキャプチャしません。 。この動作は、特に一致が連続する文字で構成されている場合に混乱を招く可能性があります。

次のコードを考えてみましょう:

match = re.findall(r'\w\w', 'hello')
print(match)

出力:

['he', 'll']

このパターンは、連続する 2 つの文字と一致します。単語文字 (w)。予想通り、彼とllは戻ってきました。ただし、el と lo は、文字列に含まれているにもかかわらずキャプチャされません。

重複する一致の克服

重複する一致をキャプチャするには、先読みアサーション (?= ...)。このアサーションは特定のパターンに一致しますが、文字列の文字を消費しません。代わりに、次の文字がアサーションと一致するかどうかをチェックします。

例:

match1 = re.findall(r'(?=(\w\w))', 'hello')
print(match1)

出力:

['he', 'el', 'll', 'lo']

この場合、(?=(ww )) は、実際に文字を消費することなく、連続する 2 つの単語文字が存在する任意の場所に一致します。これにより、findall() は重複する一致と重複しない一致の両方を返すことができます。

説明

正規表現 /(?=(ww)) は次のように分解できます。 :

  • (?:...) は非キャプチャ グループです。つまり、グループの内容はキャプチャされません。
  • ww は 2 つの連続する単語文字に一致します。
  • (?=...) は先読みアサーションで、文字列の現在の位置に ww が含まれていることを確認しますが、それらは消費されません。

このアプローチを使用すると、連続した文字で構成されている場合でも、文字列内の重複する一致をすべて効果的に検出できます。

以上がPython の「re.findall()」を使用して重複する一致を見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。