Python
 Computer >> コンピューター >  >> プログラミング >> Python

【保存版】Python正規表現パターン例まとめ|文字クラス・繰り返し・アンカーを実例で解説

Pythonでテキスト処理を行う際に欠かせないのが正規表現です。本記事では、reモジュールで使える代表的な正規表現パターンをカテゴリ別に一覧形式で解説します。文字クラス、特殊文字、繰り返し、グループ化、後方参照、アンカーまで、実例とともに確認していきましょう。

リテラル文字(そのままの文字)

特別な記号を含まない文字列は、そのまま記述すればリテラルとして扱われます。

番号例と説明
1python
「python」という文字列そのものに一致します。

文字クラス

角括弧 [] を使うと、含まれる文字のいずれか1文字にマッチさせられます。^ を先頭に付けると否定(以外)の意味になります。

番号例と説明
1[Pp]ython
「Python」または「python」に一致
2rub[ye]
「ruby」または「rube」に一致
3[aeiou]
小文字の母音いずれか1文字に一致
4[0-9]
任意の数字1文字に一致([0123456789]と同じ)
5[a-z]
小文字のASCII英字1文字に一致
6[A-Z]
大文字のASCII英字1文字に一致
7[a-zA-Z0-9]
上記のいずれか1文字に一致
8[^aeiou]
小文字の母音以外の文字に一致
9[^0-9]
数字以外の文字に一致

特殊文字クラス

よく使われる文字の種類は、バックスラッシュ付きの略記で簡潔に表せます。

番号例と説明
1.
改行以外の任意の1文字に一致
2\d
数字1文字に一致:[0-9]と同等
3\D
数字以外の1文字に一致:[^0-9]と同等
4\s
空白文字に一致:[ \t\r\n\f]と同等
5\S
空白以外の文字に一致:[^ \t\r\n\f]と同等
6\w
単語構成文字1つに一致:[A-Za-z0-9_]と同等
7\W
単語構成文字以外に一致:[^A-Za-z0-9_]と同等

繰り返しの指定

*+?{} を使うと、直前の要素の繰り返し回数を制御できます。

番号例と説明
1ruby?
「rub」または「ruby」に一致(yはあってもなくてもよい)
2ruby*
「rub」に加えて y が0個以上続くものに一致
3ruby+
「rub」に加えて y が1個以上続くものに一致
4\d{3}
ちょうど3桁の数字に一致
5\d{3}
3桁以上の数字に一致
6\d{3,5}
3桁・4桁・5桁のいずれかの数字に一致

最短一致(非貪欲)の繰り返し

量指定子の後に ? を付けると、可能な限り少ない回数でマッチさせる「最短一致」になります。

番号例と説明
1<.*>
貪欲な繰り返し:「<python>perl>」の全体に一致
2<.*?>
最短一致:「<python>perl>」の中の「<python>」だけに一致

括弧によるグループ化

丸括弧 () で囲むと、複数の要素をひとつのまとまりとして繰り返しや参照の対象にできます。

番号例と説明
1\D\d+
グループなし:+ は \d だけを繰り返す
2(\D\d)+
グループあり:+ が \D\d のペア全体を繰り返す
3([Pp]ython(, )?)+
「Python」「Python, python, python」などに一致

後方参照

以前にマッチしたグループの内容を、\1\2 のように番号で再利用できます。

番号例と説明
1([Pp])ython&\1ails
「python&pails」または「Python&Pails」に一致(先頭の文字と同じ文字が後半にも現れる必要がある)
2(['"][^\1]*\1)
シングルクォートまたはダブルクォートで囲まれた文字列に一致。\1 は第1グループがマッチした内容、\2 なら第2グループの内容、というように対応します。

選択(OR条件)

縦棒 | を使うと、複数の候補のいずれかにマッチさせられます。

番号例と説明
1python|perl
「python」または「perl」に一致
2rub(y|le)
「ruby」または「ruble」に一致
3Python(!+|\?)
「Python」の後に「!」が1個以上、または「?」が1個続くものに一致

アンカー(位置の指定)

アンカーは文字そのものではなく、マッチする位置を指定するためのメタ文字です。

番号例と説明
1^Python
文字列の先頭または行の先頭にある「Python」に一致
2Python$
文字列の末尾または行の末尾にある「Python」に一致
3\APython
文字列の先頭にある「Python」に一致
4Python\Z
文字列の末尾にある「Python」に一致
5\bPython\b
単語の境界にある「Python」に一致
6\brub\B
\B は非単語境界:「rube」「ruby」の中の「rub」には一致するが、単独の「rub」には一致しない
7Python(?=!)
直後に感嘆符(!)が続く場合のみ「Python」に一致(肯定の先読み)
8Python(?!!)
直後に感嘆符(!)が続かない場合のみ「Python」に一致(否定の先読み)

まとめ

正規表現は、文字クラス・繰り返し・グループ化・アンカーを組み合わせることで、複雑なパターンも簡潔に表現できます。まずは re.search()re.match() で基本的なパターンを試しながら、少しずつ応用範囲を広げていくのがおすすめです。

  1. Pythonの正規表現を使って文字列から数字のみを抽出・マッチングする方法

    Pythonでは、標準ライブラリの re モジュールを使うことで、正規表現によるパターンマッチングが簡単に行えます。文字列から「数字のみ」を取り出したい場合は、メタ文字 \d(任意の1桁の数字に一致)を使用します。ここでは、代表的な2つの方法——re.search() と re.findall() を使った例を紹介します。なお、コードはPython 3系の記法に準拠しています。例1:re.search() で最初に見つかった数字の並びを取得する次のコードは、指定した文字列の中から最初に出現する連続した数字(1桁以上)を検索し、マッチオブジェクトとして返します。import re m = re

  2. Pythonの正規表現とは?基本の考え方と主な使い方をわかりやすく解説

    正規表現とは何か 正規表現(Regular Expression)とは、文字列の中から特定のパターンを検索したり置換したりするために用いられる、文字の並び(パターン)のことです。シンプルに言えば、「文字列の中から目的のパターンを見つけ出し、必要に応じて書き換えるための記法」と理解するとよいでしょう。 正規表現はPythonだけでなく、Perl、R、Javaなど、ほとんどのプログラミング言語でサポートされており、テキスト処理における共通の基礎技術となっています。 正規表現が活躍する場面 正規表現は、ソースコード、ログファイル、スプレッドシート、さらにはドキュメントといったテキストデータから情報