正規表現を用いることで少ないコードで様々なパターンの文字列のチェックを行うことができます。
プログラミングのコードの記述量を減らし可読性を上げることができるため、Pythonプログラミングにおいて重要な要素です。

今回はPythonにおける正規表現の基本について説明します。

具体的には以下の4点についての説明です。

・正規表現とは?
・Pythonの正規表現で用いる特殊記号
・Python正規表現の記号エスケープ処理
・Python正規表現(reライブラリ)のメソッド

関連記事>>正規表現チェッカー for Python

正規表現とは?

正規表現は特定の文字列の検索やマッチングの記述を簡単にするための表記法です。
例えば

  • こんにちは
  • こんにちは!
  • こんにちはー

などのパターンがあった場合、人間であれば全て「こんにちは」と認識することができます。

しかし、コンピュータは「こんにちは」、「こんにちは!」、「こんにちはー」は全て違う単語として認識してしまいます。
よって正規表現を用いずにコンピュータに同じ単語を同じものとして覚えさせる為には3つの単語全てを教えなければなりません。

また、

・こんにちは!!
・やあ、こんにちは

などの覚えさせたいパターンが増えた場合に都度対応が必要です。
パターンが増えるたびにコードも増加していき可読性が下がります。

正規表現はこれらの問題を解決することが可能です。

正規表現を用いると「こんにちは」だけを教えればよくなり、パターン分の書き換えも不要で、パターンが増えた時の修正も少なくなります。
コードの可読性も可能です。

Pythonの正規表現で用いる特殊記号

特殊記号
正規表現で使う主な特殊記号は以下の通りです。

開始 ^
終了 $
改行以外の一字 .
英字・小文字 [a-z]
英字・小文字 [A-Z]
数字 [0-9]
英数字 [a-zA-Z0-9]
スペース \s
0回以上の繰り返し *
1回以上の繰り返し +
n回の繰り返し {n}
n回以上の繰り返し {n,}
n回以上m回以下の繰り返し {n,m}
省略可 ?
OR |
スペース以外の一字 \S

他の記号もありますが、とりあえずはこれだけ覚えておけばだいたいの表現はできます。

正規表現と繰り返しの表現

正規表現で繰り返しを表現する方法としては主に以下の3つの方法があります。
・正規表現で0回以上の繰り返しは「*」(アスタリスク)を使う
・正規表現で1回以上の繰り返しは「+」を使う
・正規表現におけるn回の繰り返しは「{n}」を使う

正規表現で繰り返しを表現する方法

正規表現で部分一致や完全一致をチェックする表現

前方一致は「^」や「\A」、後方一致は「$」や「\Z」でチェックします。

完全一致したい場合はそれぞれの記号を併せて「^あいうえお$」のように記述します。
部分一致の場合は「^.*あいうえお.*$」のように前方と後方に「改行以外の1文字以上」を意味する「.*」を記述します。

正規表現で部分一致・完全一致の記述をする方法

正規表現でグループを使用する

正規表現のグループを活用することで、文字列中の特定の箇所を別途取り出すことができます。
グループに来た値によって処理を変えるといったことが可能です。

正規表現のグループの活用方法

Python正規表現の記号エスケープ処理

上記の通り、ドットやハイフンなどは特殊記号として使われています。
よってドットやハイフンなどは一部の記号はバックスラッシュによるエスケープが必要です。

Python正規表現でピリオド(ドット)を使う方法

Pythonの正規表現でピリオド(ドット)を指定する場合はバックスラッシュでエスケープして「\.」のように指定します。
エスケープが必要な理由は正規表現におけるドットが「改行以外の1字」を意味するためです。

関連記事>>正規表現でピリオド(ドット)を指定するには?

Python正規表現でハイフンを使う方法

Pythonの正規表現でハイフンを指定する場合はバックスラッシュでエスケープして「\-」のように指定します。
エスケープが必要な理由は正規表現におけるハイフンが数字を示す[0-9]や英字を示す[a-z]などの補助記号として使われているためです。

正規表現でハイフンを指定するには?

Python正規表現でスペースを使う方法

スペースはそのまま使用することも可能ですが、全角・半角は別の文字として区別されます。
特殊記号「\s」を使うことで全角スペースも半角スペースを同じ文字として扱われます。

正規表現でスペースを指定するには?

Python正規表現でタブを使う方法

タブもそのままコードに記述できますが、スペースと区別がつきにくく、ソースコードの可読性が下がるので特殊記号を使用することをオススメします。
特殊記号は「\t」を指定します。

正規表現でタブを指定するには?

Python正規表現で英数字を使う方法

正規表現で英数字を指定する場合は「[0-9]」のように「[]」の中に指定します。
ハイフンを使うことで範囲指定することも可能です。

正規表現で英数字を使う方法

Python正規表現でひらがなやカタカナを使う方法

正規表現でひらがなやカタカナを指定する場合は英数字と同様で「[あ-ん]」のように「[]」の中に指定します。
ハイフンを使うことで範囲指定することも可能です。

正規表現でひらがなやカタカナを使う方法

Python正規表現で活用例

Pythonで正規表現で郵便番号や電話番号などをマッチさせる活用例です。
以下の4つの記述例について紹介しています。

・Pythonと正規表現で郵便番号とマッチさせる方法
・Pythonと正規表現で電話番号とマッチさせる方法
・Pythonと正規表現でEmailアドレスとマッチさせる方法
・Pythonと正規表現でURLとマッチさせる方法

Pythonと正規表現の活用例〜Emailアドレスや郵便番号の記述方法を紹介〜

Python正規表現(reライブラリ)のメソッド

メソッド
Pythonで正規表現を使用する場合はライブラリ「re」を使う必要があります。

Pythonに標準でインストールされているため、importするだけで使用することができます。
下記の例は「文字列が『こんにちは』を含むか」を定義したものです。マッチングを行なった場合「こんにちは」を含む全ての文字列に対して「TRUE」を返します。

◆記述内容
正規表現を使えば

よく使うメソッドである「re.compile()」、「re.search()」、「re.match()」の3つについて紹介します。

re.compile()

正規表現を比較できる形に変換するメソッドです。

◆使用例

re.search()

正規表現のマッチング処理を行うメソッドです。
文字列の全文を検索してマッチする文字列があるかチェックします。

◆使用例

re.match()

正規表現のマッチング処理を行うメソッドです。
文字列の先頭がパターンとマッチするかチェックします。

◆使用例

他の正規表現やreライブラリのメソッドについては
公式ドキュメントをお読みください。

こちらで簡単な正規表現のチェックができるので興味があったら覗いてみてください。
>>正規表現チェッカー for Python

まとめ

コンピュータはちょっとした言葉の違いであっても違う単語として認識してしまいます。
正規表現を用いることで「こんにちは」、「こんにちは!」、「こんにちはー」などのちょっとした表記の揺れを同じ言葉として認識させることが可能です。

表記の違いを同じ言葉として認識できると記述するコードが短くなるため、可読性も上がり修正にかかる時間も減ります。
パターンの追加もほぼ不要となります。

正規表現を活用することでコード作成の効率化や可読性の向上にもなるので是非習得するようにしましょう。

PtyhonまとめTOP>>Pythonプログラミングの始め方まとめ

◆関連記事

Pythonの正規表現については「公式ドキュメント」も併せてお読みだくさい。