【保存版】Python正規表現の特殊文字・メタ文字の使い方まとめ
Python正規表現における特殊文字とは
Pythonの正規表現では、特殊文字以外の文字はその文字自身にマッチします。一方、特殊文字はそれ自体にはマッチせず、特別な役割を果たします。特殊文字そのものを検索したい場合は、バックスラッシュ「\」を使ってエスケープします。
以下は、Python公式ドキュメントに基づいた主な特殊文字の一覧です。
主な特殊文字一覧
| 記号 | 意味 |
|---|---|
| \ | 特殊文字をエスケープする、またはシーケンスを開始する |
| . | 改行以外の任意の1文字にマッチ(re.DOTALL を参照) |
| ^ | 文字列の先頭にマッチ(re.MULTILINE を参照) |
| $ | 文字列の末尾にマッチ(re.MULTILINE を参照) |
| [ ] | マッチ対象となる文字の集合(文字クラス)を囲む |
| R|S | 正規表現Rまたは正規表現Sのいずれかにマッチ |
| () | キャプチャグループを作成し、優先順位を示す |
文字クラス「[ ]」の中で使える特殊文字
「[」の後に文字の集合を囲む場合は、通常の特殊文字の多くが無効になり、特別な意味を持つのは次の3種類だけです。
| 記号 | 意味 |
|---|---|
| ] | 集合を閉じる(先頭の文字でない場合のみ有効) |
| - | 範囲を示す。例:「a-c」は a、b、c のいずれかにマッチ |
| ^ | 集合の否定(先頭の文字である場合のみ有効)。例:「[^a]」は a 以外の文字にマッチ |
量指定子(繰り返しの指定)
パターンの繰り返し回数を指定する量指定子は以下のとおりです。
なお、量指定子の直後に「?」を付けると、貪欲でない(最短一致の)マッチになります。
| 記号 | 意味 |
|---|---|
| {m} | ちょうどm回の繰り返し |
| {m,n} | m回(省略時は0回)からn回(省略時は無制限)までの繰り返し |
| * | 0回以上の繰り返し。「{}」と同等 |
| + | 1回以上の繰り返し。「{1}」と同等 |
| ? | 0回または1回の出現。「{,1}」と同等 |
まとめ
Pythonの正規表現では、「.」「^」「$」「*」「+」「?」などのメタ文字が特別な意味を持つため、これらを普通の文字として扱う際は「\」によるエスケープが必要です。また、文字クラス内では特殊文字の挙動が変わる点や、量指定子に「?」を付けることで最短一致にできる点も覚えておくと、複雑なパターンを正確に書けるようになります。
-
Pythonの正規表現で単語以外の文字をマッチさせる方法
正規表現を使って文字列から「単語以外の文字」を取り出したい場合、Pythonのreモジュールに用意されている特殊シーケンス \W を使うのが最も簡単です。\W は、英字・数字・アンダースコア([^a-zA-Z0-9_])以外のすべての文字に一致します。以下のコードでは、指定した文字列から単語以外の文字をすべて抽出し、そのリストを出力しています。コード例import re s = ab5z8d*$&Y@ regx = re.compile(r\W) result = regx.findall(s) print(result)ポイントとして、パターン文字列の先頭に r を付けて raw 文字列に
-
【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法
次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ