Pythonの正規表現でテキストからメールアドレスを抽出する方法
メールアドレスは非常に複雑で、世界中で統一された標準規格が存在しないため、正規表現だけでメールアドレスを正確に識別するのは容易ではありません。そこで役立つのが RFC 5322 です。この規格ではメールアドレスの形式が定義されており、本記事ではこの形式をもとに、テキストからメールアドレスを抽出する方法を解説します。
たとえば、次のような入力文字列が与えられた場合を考えてみましょう。
Hi my name is John and email address is john.doe@somecompany.co.uk and my friend's email is jane_doe124@gmail.com
このとき、期待される出力は以下のとおりです。
john.doe@somecompany.co.uk jane_doe124@gmail.com
メールアドレス抽出用の正規表現パターン
メールアドレスの抽出には、次のような正規表現パターンを使用できます。
[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-.]+ … ドットとトップレベルドメイン(TLD)以降の部分にマッチします。
Pythonコードでの実装例
標準ライブラリの re モジュールが提供する findall() メソッドを使うと、文字列内に含まれるすべてのメールアドレスをリストとして簡単に取得できます。
import re
my_str = "Hi my name is John and email address is john.doe@somecompany.co.uk and my friend's email is jane_doe124@gmail.com"
emails = re.findall(r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)", my_str)
for mail in emails:
print(mail)なお、正規表現パターンを記述する際は、バックスラッシュのエスケープ処理を避けるために、先頭に「r」を付けたraw文字列(r"...")で指定するのがPythonの慣用的な書き方です。
実行結果
このコードを実行すると、次の出力が得られます。
john.doe@somecompany.co.uk jane_doe124@gmail.com
findall() はマッチしたすべての文字列をリストで返すため、複数のメールアドレスが含まれるテキストでも一度の処理でまとめて抽出できる点が便利です。ログ解析やスクレイピングなど、大量のテキストデータから連絡先情報を収集したい場面で活用してみてください。
-
PythonでMACアドレスを取得する3つの方法をわかりやすく解説
MACアドレス(Media Access Control Address)は、PCに搭載されているネットワークカードに割り当てられた固有のハードウェアアドレスです。その名の通り必ず一意であり、同じローカルネットワーク上に存在する2つのデバイスが同一のMACアドレスを持つことはありません。 MACアドレスの主な役割は、LAN(ローカルエリアネットワーク)などのネットワーク上にあるすべてのノードに対して、一意のハードウェアアドレス(物理アドレス)を提供することです。ここでいうノードとは、コンピュータやプリンター、ルーターといったデバイスがネットワークに接続される接続点のことを指します。 この記事で
-
PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法
はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c