メールアドレスの正規表現パターンの解説
メールアドレスを正規表現のパターンとして表す時、下記のようになる。
“(^[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は、文字列の中から、正規表現にマッチした文字列をリストにして全て取り出す。