スポンサーリンク

python 正規表現でメールアドレスの一致チェック、抽出を行う

メールアドレスの正規表現パターンの解説

メールアドレスを正規表現のパターンとして表す時、下記のようになる。

“(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)”

先頭から解説していきます。

^[a-zA-Z0-9_.+-]+@

  • ^は直後の文字が先頭かどうか
  • []は中にある文字のどれか
  • +は直前の文字の1回以上の繰り返し
  • 最後は@

上記の点をまとめると、
英数字、”_.+-“の組み合わせの文字列が先頭に来るということ。
その後ろは@になる。

[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)

  • $は行末で表す
  • \.は.という文字を表す

ここは@以降のところで、上記から
英数字と-の文字列、. 、英数字と-、. の文字列を表す。

一致チェック

文字列がメールアドレスかどうかを、
正規表現を使ってチェックします。

サンプルコード

# -*- coding: utf-8 -*-
import re

pattern = "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
mail_list = ["test+mail", "hoge+hoge@gmail.com", "fugafuga@yahoo.co.jp"]

for mail in mail_list:
    if re.match(pattern, mail):
        print("Is mail:" + mail)
    else:  
        print("Not mail:" + mail)

実行結果

Not mail:test+mail
Is mail:hoge+hoge@gmail.com
Is mail:fugafuga@yahoo.co.jp

解説

re.match()で正規表現にマッチするかを判断している。
メールアドレスがpatternにマッチしていると、オブジェクトを返し、
マッチしていないなら、Noneを返す。

メールアドレス抽出

文字列に含まれたメールアドレスを正規表現を使って全て抽出する。

サンプルコード

# -*- coding: utf-8 -*-
import re
 
pattern = "[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
text = """あなたのメールアドレスはpython@gmail.comですか?
私のはprogram.python@yahoo.co.jpです。
"""
 
mail_list = re.findall(pattern, text)
print(mail_list)

実行結果

['python@gmail.com', 'program.python@yahoo.co.jp']

解説

文章からメールアドレスを抽出している。
上記の一致チェックでは、先頭と行末を表す^$がありましたが、
今回は文章中のメールアドレスを取り出すので削除している。

re.findallは、文字列の中から、正規表現にマッチした文字列をリストにして全て取り出す。

関連記事