Pythonの正規表現における後方参照の仕組みと使い方を徹底解説
グループ化とは
正規表現では、パターンの一部を丸括弧( )で囲むことで「グループ」として扱うことができます。グループ化を行うと、単一の文字だけでなく、グループ全体に対して量指定子などの演算子を適用できるようになります。
キャプチャグループと後方参照
丸括弧には、部分式をグループ化する役割に加えて、キャプチャグループを作成する働きもあります。グループ化した部分が文字列にマッチすると、そのマッチした部分は後方参照として記憶されます。後方参照を利用することで、正規表現の中で同じパターンを再利用することが可能になります。
括弧で囲まれた部分式は、\1 や $1 のように番号で参照できます。\1 は1番目のグループ、\2 は2番目のグループに対応します。
繰り返される単語の検出例
たとえば、正規表現 \b(\w+)\b\s+\1\b は、「tahiti tahiti」のように同じ単語が連続して出現する箇所にマッチします。これは、(\w+) の括弧が単語をグループ1としてキャプチャし、後方参照 \1 がそのキャプチャされた内容と同じ文字列に再度マッチするためです。
サンプルコード
import re
s = 'Tahiti Tahiti Atoll'
result = re.findall(r'\b(\w+)\b\s+\1\b', s)
print(result)
実行結果
['Tahiti']
この例では、文字列「Tahiti Tahiti Atoll」の中から、連続して繰り返されている単語「Tahiti」が検出され、リストとして出力されています。
補足:名前付きグループを使った後方参照
Pythonでは、(?P<name>...) の形式で名前付きグループを定義し、(?P=name) で参照することもできます。番号ではなく名前で参照できるため、複雑なパターンでも可読性が向上します。
import re
pattern = r'(?P<word>\b\w+\b)\s+(?P=word)'
result = re.findall(pattern, 'Tahiti Tahiti Atoll')
print(result) # ['Tahiti']
後方参照は、重複データの検出やテキストの置換処理など、実務でも頻繁に活用される強力な機能です。ぜひ実際のコードで試してみてください。
-
Pythonの正規表現で数字以外の文字のみをマッチ・抽出する方法
Pythonの正規表現(reモジュール)を使うと、文字列から数字以外の文字だけを簡単に抽出できます。パターン \D は「数字以外の1文字」にマッチし、\D+ と書くことで「数字以外の文字が1回以上連続している部分」にマッチします。例:re.search()で最初のマッチを取得する次のコードは、指定された文字列から数字以外の部分を正規表現でマッチさせます。import re m = re.search(r\D+, 5Need47for Speed 2) print(m)出力<re.Match object; span=(1, 5), match=Need>re.search() は
-
Pythonの正規表現における修飾子(フラグ)の使い方と機能一覧
Python正規表現の修飾子とはPythonのreモジュールでは、正規表現によるパターンマッチングの挙動を制御するために、さまざまな修飾子(フラグ)を指定することができます。これらの修飾子を使うことで、大文字小文字の区別や改行の扱いなど、マッチングの動作を柔軟に変更できます。以下に、主要な修飾子とその機能を一覧形式で紹介します。1. re.I(re.IGNORECASE)大文字と小文字を区別せずにマッチングを行います。英字の大小を無視したい場合に便利です。2. re.L(re.LOCALE)現在のロケール設定に従って単語を解釈します。このフラグは、アルファベット系のグループ(\w および \W