0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】re.searchとre.findallの違いは?サンプルコードで解説

Posted at

概要

Pythonのre.searchre.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です(関数のカプセル化にはなりますが、柔軟性はやや落ちるので方針次第)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?