no-image

混乱してきたので正規表現をまとめる

Pythonの正規表現はエスケープ文字に気をつける

import re
phone_regex = re.compile(r'''(
(\d{3}|\(\d{3}\))?
(\s|-|\.)? 
(\d{3})
(\s|-|\.)
(\d{4})
(\s*(ext|x|ext.)\s*(\d{2,5}))?
)''', re.VERBOSE)

mo1 = phone_regex.findall('333-333-4444 x 555')
print(mo1)

# [('333-333-4444 x 555', '333', '-', '333', '-', '4444', ' x 555', 'x', '555')]

全体がリストの[0]になり()で囲まれた部分が順番にリストになっている → findall()メソッド。

問題は \( \) のエスケープ文字だ。これは文字であって、()に含まれない。当たり前だ。これを勘違いしてしまうと

凄い混乱がおこってしまう。気を付けていただきたい。
青文字のところにあるように、まず全体の正規表現がリストに格納され → 次にその内側の括弧がリストに格納される。

しかしこの改行で正規表現ができるようになる”'()”’は非常に便利だ。