【Python無料学習】正規表現

※この記事は「2020年7月21日」に更新しました。

無料で学習できる Python(パイソン)講座。

今回は、正規表現について。

前回は、文字列操作について、解説しました。

文字列操作

【Python無料学習】文字列操作

2020年7月19日

実は、他のプログラミング言語でも正規表現を知っている人とそうでない人の差は大きいです。

それでは、詳しく説明していきます。

正規表現とは

正規表現とは、文字列を一つのパターン化した文字列で表記する方法です。

試しにコードを書いてみます。

\d{3}-\d{4}

これは、郵便番号(ハイフンあり)を正規表現で表したものです。

郵便番号には以下のような特徴があります。

  • 3桁の数字の次にハイフン(-)があり、次に4桁の数字で構成されている。
  • 文字数は、8文字である。

正規表現がない場合、最初の3文字と最後の4文字が数字かどうかの判定やハイフンが4文字目にあるかどうかの判定、文字数が8文字かどうかなど、かなり面倒です。

しかし、正規表現を使えば、このようなステップは必要ないのです。



Pythonで正規表現を使う方法

Python(パイソン)で正規表現を使うには、標準ライブラリである reモジュールをインポートします。

import re

これを実行することで reモジュールが使えるようになります。

Regexオブジェクトの生成

re.compile に正規表現パターンを渡すと、Regexオブジェクトが生成されます。

試しに使ってみます。

post_num_regex = re.compile(r'\d{3}-\d{4}')

これで、変数 post_num_regex に(郵便番号にマッチする)Regexオブジェクトが格納されました。

raw文字列について
正規表現はバックスラッシュを多用します。しかし、バックスラッシュはエスケープ文字として特殊な意味を持ちます。raw文字列(クォートの前に r を付ける)を使えば、エスケープ文字を無視して生の文字列として扱うことができます。

searchメソッド

Regexオブジェクトの searchメソッドを使えば、マッチする部分を探すことができます。

実際に使ってみましょう。

test1.py という以下のファイルを作成します。

# reモジュールをインポート
import re

# 郵便番号にマッチする Regexオブジェクトを変数に格納
post_num_regex = re.compile(r'\d{3}-\d{4}')

# 郵便番号部分を検索
match_o = post_num_regex.search('私の郵便番号は111-1111です(嘘)。')

# 検索した郵便番号を表示
print('あなたの郵便番号:' + match_o.group())

実行結果は以下の通りです。

正規表現

Matchオブジェクトが match_o に格納されます。

Matchオブジェクトの groupメソッドを使うことで実際にマッチした文字列を取得することができます。

findallメソッド

searchメソッドは、最初に見つかった文字列をオブジェクトとして返します。

それに対して、findallメソッドは、見つかった全ての文字列を返します。

test2.py という以下のファイルを作成します。

# reモジュールをインポート
import re

# findallメソッドでマッチした文字列を表示
print(re.findall(r'\d+', 'Hello. My name is Takafumi. I am 38 years old. My favorite number is 5.'))

実行結果は以下の通りです。

正規表現

正規表現の記号まとめ

正規表現で使う記号をまとめました。

正規表現 意味
^ 先頭から
$ 末尾から
? 直前のグループの0回か1回の出現にマッチ
* 直前のグループの0回以上の出現にマッチ
+ 直前のグループの1回以上の出現にマッチ
{n} 直前のグループのn回の出現にマッチ
{n,} 直前のグループのn回以上の出現にマッチ
{,n} 直前のグループの0~n回の出現にマッチ
{n,m} 直前のグループのn~m回の出現にマッチ
. 改行文字以外の任意の1文字

全て覚える必要はありませんが、この記事をブックマークしておき、必要なときに参考にしていただければ幸いです。

特殊シーケンス

正規表現固有の表現で特殊シーケンスというものがあります。

任意の数字や英数字を表現するときに便利です。

特殊シーケンス 意味
\d 任意の数字
\D 任意の数字以外
\w 任意の英数字
\W 任意の英数字以外
\s スペース、タブ、改行
\S スペース、タブ、改行以外

最後に

いかがでしょうか。

今回は、正規表現について、解説していきました。

正規表現は、Python(パイソン)だけでなく、他のプログラミング言語でも重要な役割を持っています。

とにかく慣れていきましょう。