Pythonと正規表現でテキストから電話番号とメールアドレスを自動抽出する

この記事では、Pythonのre(正規表現)モジュールとpyperclip(クリップボード操作)モジュールを組み合わせて、クリップボードにコピーされたテキストから、電話番号とメールアドレスを自動で抽出し、整形して再びクリップボードに戻す実用的なツールを作成する方法を解説します。


目次

1. 準備:必要なモジュール

このプログラムでは、正規表現を扱うreモジュールと、クリップボードを操作するpyperclipモジュールを使用します。pyperclipはサードパーティ製のライブラリなので、事前にインストールが必要です。

pip install pyperclip

2. パターン定義:正規表現の作成

次に、抽出したい電話番号とメールアドレスのパターンを正規表現で定義します。ここではre.VERBOSEフラグを使い、コメントを付けて可読性を高めます。

電話番号の正規表現

日本の電話番号は様々な形式(例: 090-1234-5678, (03)1234-5678, 0120-123-456)がありますが、今回は市外局番や携帯電話番号の一般的な形式に対応するパターンを作成します。

import re

phone_regex = re.compile(r'''(
    (\d{2,4}|\(\d{2,4}\))?    # 市外局番 (例: 03, (090))。オプショナル
    (\s|-|\.)?               # 区切り文字 (スペース, -, .)。オプショナル
    (\d{3,4})                # 加入者番号(前半)
    (\s|-|\.)                # 区切り文字
    (\d{4})                  # 加入者番号(後半)
    )''', re.VERBOSE)

メールアドレスの正規表現

次に、一般的なメールアドレスの形式にマッチするパターンを定義します。

email_regex = re.compile(r'''(
    [a-zA-Z0-9._%+-]+       # ユーザー名部分
    @                       # @マーク
    [a-zA-Z0-9.-]+          # ドメイン名部分
    (\.[a-zA-Z]{2,4})       # トップレベルドメイン (例: .com, .jp)
    )''', re.VERBOSE)

3. プログラム本体の実装

正規表現の準備ができたら、クリップボードからテキストを取得し、パターンにマッチする部分をすべて探し出し、結果を整形して出力するメインの処理を記述します。

import pyperclip, re

# (ここに上記で定義したphone_regexとemail_regexを記述)

# 1. クリップボードからテキストを取得
text = str(pyperclip.paste())

# 2. マッチした結果を保存するリスト
matches = []

# 3. 電話番号を検索し、整形してリストに追加
for groups in phone_regex.findall(text):
    phone_num = '-'.join([groups[1], groups[3], groups[5]])
    # 市外局番の括弧などを除去
    phone_num = phone_num.replace('(', '').replace(')', '')
    matches.append(phone_num)

# 4. メールアドレスを検索し、リストに追加
for groups in email_regex.findall(text):
    matches.append(groups[0])

# 5. 結果をクリップボードにコピーして出力
if len(matches) > 0:
    # 重複を除去してからクリップボードにコピー
    unique_matches = sorted(list(set(matches)))
    pyperclip.copy('\n'.join(unique_matches))
    print("クリップボードにコピーしました:")
    print('\n'.join(unique_matches))
else:
    print("電話番号やメールアドレスは見つかりませんでした。")

使い方とまとめ

このスクリプトを実行する前に、電話番号やメールアドレスが含まれたウェブサイトの文章などをクリップボードにコピーしておきます。その後、このPythonスクリプトを実行すると、ターミナルに抽出されたリストが表示され、同時にクリップボードの中身も整形されたリストで上書きされます。

このプログラムは、正規表現の強力なパターンマッチング能力と、pyperclipによるOS連携を組み合わせることで、日常的なテキスト処理作業を大幅に効率化できる好例です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次