python

pythonでの正規表現

正規表現のパターンマッチング

pythonの正規表現関数は、reモジュールの中に含まれています。
これはpythonをインストールしたタイミングで標準で入っているので、pipでインストールする必要がありません。

import re

tel = re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d') # 正規表現の文字列
mo = tel.search('私の電話番号は080-2222-2222です')
print(mo) # <re.Match object; span=(7, 20), match='080-2222-2222'>
print(mo.group()) # 080-2222-2222

これが単純なパターンマッチングです。re.compile()の引数に条件に合う正規表現の文字列を指定します。今回は携帯番号の正規表現です。
\dは1文字の数字を表します。また、\は基本的にエスケープシーケンスを表しますが、row文字列に変換することによって、\をそのままに表示することでシンプルにしています。
row文字列に変換しないと、re.compile(‘\\d\\d\\d-\\d\\d\\d\\d-\\d\\d\\d\\d’)のように書かないと行けないようになってしまいます。
なので、正規表現を使う時はrow文字列をよく用います。

seachメソッドはcompileメソッドで定義した正規表現にパターンマッチする部分を探します。
マッチする部分がなければ、Noneを返します。

最後に、パターンマッチした部分を文字列として取り出すためには、groupメソッドで取り出すことができます。

補足

re.compile(r’\d\d\d-\d\d\d\d-\d\d\d\d’)の部分はもう少し簡単に書くことができます。
re.compile(r’\d{3}-\d{4}-\d{4}’)のように書き換えることができます。
({3})=>これは直前のパターンと3回マッチすること同義です。

\dは、数字を表しますが言い換えれば(0|1|2|3|4|5|6|7|8|9)と同じ意味になります。縦棒はプログラミングのorと同じです。
reモジュールではその他にも便利な短縮してくれる物があります。

短縮形意味
\d0~9の数字
\D0~9の数字以外
\w文字、数字、下線
\W文字、数字、下線以外
\sスペース、タブ、改行
\Sスペース、タブ、改行以外