概要
Pythonのre.search
とre.findall
を使ってみたのでサンプルコードで紹介します。
サンプルコードと解説
それぞれ以下の違いがあります。
・re.search
:文字列全体を検索し、最初に一致した部分文字列を含むマッチオブジェクトを返す
・re.findall
:文字列全体を検索し、一致するすべての部分文字列をリストとして返す
上記の通り、re.search
は最初の一致を確認するために、re.findall
は一致するすべての部分文字列を確認するために使用されます。
import re
def find_all_emails(email_pattern, text):
emails = re.findall(email_pattern, text)
print("抽出されたメールアドレス:")
for email in emails:
print(email)
def search_first_email(email_pattern, text):
emails = re.search(email_pattern, text)
if emails:
print("最初に見つかったメールアドレス:", emails.group())
# 以下で呼び出してもOK
# find_all_emails(email_pattern, text)
else:
print("メールアドレスが見つかりませんでした。")
text = """
- 田中: tanaka@example.com
- 佐藤: sato@example.com
- 鈴木: suzuki@example.com
"""
# メールアドレスの正規表現パターン
email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
find_all_emails(email_pattern, text)
search_first_email(email_pattern, text)
上記の出力結果は以下です。
抽出されたメールアドレス:
tanaka@example.com
sato@example.com
suzuki@example.com
最初に見つかったメールアドレス: tanaka@example.com
コメントアウト部分で記載した通り、emails
がある場合のみfind_all_emails
を呼び出す、という条件付きの実行にしてもOKです(関数のカプセル化にはなりますが、柔軟性はやや落ちるので方針次第)。