[Python] 正規表現によるパターンマッチング

re.compile を使った方法

電話番号 ‘012-3456-7890’ から数字の部分を抜き出す方法。

まずは、import re で正規表現を使うためのモジュールをインポートする。

compile を使って正規表現のパターンを決める。

search を使って、指定した文字列から正規表現のパターンにマッチしたものを検索する。

マッチしたものは、group()で抽出することができる。

import re
phone_number = re.compile(r'(\d\d\d)-(\d\d\d\d)-(\d\d\d\d)')
r = phone_number.search('012-3456-7890')
print(r.group(0))
print(r.group(1))
print(r.group(2))
print(r.group(3))
012-3456-7890
012
3456
7890

‘\d’ ではなく、’¥d’ を指定した場合は下記のエラー。Windowsの場合は、’¥d’ でうまくいっていたので気づかなかった。Macの場合、’Option + ¥’ で、’\’ を入力することができる。要注意。

AttributeError: 'NoneType' object has no attribute 'group'
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/var/folders/wh/h0c8s0bx6fg2py0mgxk2n3h80000gp/T/ipykernel_66849/3476373152.py in <module>
      2 phone_number = re.compile(r'(¥d¥d¥d)-(¥d¥d¥d¥d)-(¥d¥d¥d¥d)')
      3 mo = phone_number.search('012-3456-7890')
----> 4 print(mo.group(0))
      5 print(mo.group(1))
      6 print(mo.group(2))

AttributeError: 'NoneType' object has no attribute 'group'