毎日ちょっとPython ~ 19日目 ~
さぁ時間を決めることによって、成功している毎日ちょっとシリーズ。素晴らしい。
前回やったものの日本版を書く
日本の場合は 市外局番が 1~4 桁、市内局番が 1~4 桁、加入者番号が4桁なので以下のような感じ
phone_regex = re.compile(r'''(
(\d{1,4}|\(\d{1,4}\)) #市外局番
(\s|-) #区切り
(\d{1,4}) #市内局番
(\s|-) #区切り
(\d{3,4}) #加入者番号
(\s*(ext|x|ext.)\s*(\d{2,5}))? #内線番号
)''',re.VERBOSE)
さ、次に行きます。
ステップ2: 電子メールアドレスの正規表現を作る
メールアドレスはユーザー名と、ドメイン名 + .(ドット)なんとかです。
#TODO: 電子メールの正規表現
email_regex = re.compile(r'''(
[a-zA-Z0-9._%+-] #ユーザ名
@ #@記号
[a-zA-Z0-9.-]+ #ドメイン名
(\.[a-zA-Z]{2,4}) #ドット何とか
)''',re.VERBOSE`)
これで基本的なメールアドレスにはマッチさせられます。(ただ書籍には形式がややこしいって書いてあった)
ステップ3: クリップボードのテキストを検索する
準備完了したので、こんどはPythonのreモジュールにクリップボードのテキストを検索するという大変な仕事をやってもらいましょう。
#TODO: クリップボードのテキストを検索する
text = str(pyperclip.paste())
matches = []
for groups in phone_regex.findall(text):
phone_num = '-'.join([groups[1],groups[3],groups[5]])
if groups[8] != '':
phone_num += ' x' + groups[8]
matches.append(phone_num)
for groups in email_regex.findall(text):
mathes.append(groups[0])
findall()メソッドは、検索結果をタプルのリストとして返します。正規表現がマッチするたびに1つのタプルが作られ、1つのタプルには正規表現のグループに対する文字列が格納されています。グループ0は正規表現全体を表すので、タプルの先頭要素は検索したい対象そのものになります。
最後に
来週はこのクリップボードのテキストを検索するを分解した理解にする。