Pythonでメールアドレスからユーザー名やドメイン名を抽出する

Python

メールアドレスからユーザー名やドメイン名を抽出するには?

データ集計中にメールアドレスからユーザー名やドメイン名を取得して集計したい場合があります。

例えば
hogehoge@examples.comというメールアドレスがあった場合、「@」までの文字列を取得して「hogehoge」を取得したり、もしくは逆から読み込みして「examples.com」とドメイン名を取得したい場合などです。

本記事では、Pythonで文字列から指定文字を前方から検索して切り出しして取得する方法と文字列を指定文字から後方から検索して切り出しして取得する方法手順を紹介します。

前方、後方から検索して切り出しして取得するサンプルコード

前方から検索して切り出しして取得するforward_until_char関数、後方から検索して切り出しして取得するbackward_until_char関数のサンプルコードを紹介します。

def forward_until_char(text, search_char):
    """
    前方検索して指定文字列までの部分文字列を返す関数

    Parameters:
        text (str): 検索を行う対象の文字列
        search_char (str): 前方検索を行うための文字列

    Returns:
        str: 指定文字列 `search_char` の直前までの部分文字列を返す。見つからない場合は None を返す。
    """
    index = text.find(search_char)
    if index != -1:
        return text[:index]
    else:
        return None


def backward_until_char(text, search_char):
    """
    後方検索して指定文字列の後の部分文字列を返す関数

    Parameters:
        text (str): 検索を行う対象の文字列
        search_char (str): 後方検索を行うための文字列

    Returns:
        str: 指定文字列 `search_char` の直後からの部分文字列を返す。見つからない場合は None を返す。
    """
    index = text.rfind(search_char)
    if index != -1:
        return text[index + len(search_char):]
    else:
        return None
    



##############################################################
# 関数のテスト
if __name__ == "__main__":
    
    # メールアドレス
    input_text = 'hogehoge@examples.com'
    schar = '@'  # 検索する文字列

    # 文字列を前方から検索 半角
    output_text = forward_until_char(input_text,schar)
    print('文字列を前方から検索 メールアドレスからユーザー名')
    print(output_text)
    print('\n')

    # 文字列を後方から検索 全角
    output_text = backward_until_char(input_text,schar)
    print('文字列を後方から検索 メールアドレスからドメイン名')
    print(output_text)
    print('\n')

    # 関数の使用例 半角
    input_text = 'Hello, World!'
    schar = ', '  # 検索する文字列

    # 文字列を前方から検索 半角
    output_text = forward_until_char(input_text,schar)
    print('文字列を前方から検索 半角例')
    print(output_text)
    print('\n')

    # 文字列を後方から検索 半角
    output_text = backward_until_char(input_text,schar)
    print('文字列を後方から検索 半角例')
    print(output_text)
    print('\n')

    # 関数の使用例 全角
    input_text = 'ハロー、 ワールド!'
    schar = '、 '  # 検索する文字列

    # 文字列を前方から検索 全角
    output_text = forward_until_char(input_text,schar)
    print('文字列を前方から検索 全角例')
    print(output_text)
    print('\n')

    # 文字列を後方から検索 全角
    output_text = backward_until_char(input_text,schar)
    print('文字列を後方から検索 全角例')
    print(output_text)
    print('\n')

    # 関数の使用例 半角・全角混在例
    input_text = 'Hello、ワールド!'
    schar = 'o、ワ'  # 検索する文字列

    # 文字列を前方から検索 半角・全角混在例
    output_text = forward_until_char(input_text,schar)
    print('文字列を前方から検索 半角・全角混在例')
    print(output_text)
    print('\n')

    # 文字列を後方から検索 半角・全角混在例
    output_text = backward_until_char(input_text,schar)
    print('文字列を後方から検索 半角・全角混在例')
    print(output_text)
    print('\n')

実行結果は以下の通りです。

文字列を前方から検索 メールアドレスからユーザー名
hogehoge


文字列を後方から検索 メールアドレスからドメイン名
examples.com


文字列を前方から検索 半角例
Hello


文字列を後方から検索 半角例
World!


文字列を前方から検索 全角例
ハロー


文字列を後方から検索 全角例
ワールド!


文字列を前方から検索 半角・全角混在例
Hell


文字列を後方から検索 半角・全角混在例
ールド!

最後に

以上がPythonで文字列を指定文字から検索して文字列を切り出す関数です。

汎用的関数ですので他にも以下のような利用用途が考えられます。

  1. ファイルパスからファイル名の取得: ファイルパスに対して backward_until_char 関数を使用して最後のディレクトリ区切り文字 / または \ の後の文字列を抽出しファイル名を取得。
  2. 日付フォーマットの変更: /- で区切られた日付から年、月、日を抽出するためにこれらの関数を使用します。例えばforward_until_char で年を取り出し残りの文字列にbackward_until_char を適用して日を取り出す。
  3. ログファイルの解析: ログから特定のプレフィックスやサフィックスまでのテキストを抽出するために使用します。例えばエラーコードの前後のテキストを取得するためにこれらの関数を使用することができます。
  4. CSVファイルの処理: コンマやその他のデリミタによって区切られた値を読み取り、特定の列のデータを抽出するために使用する。
  5. テキストからの引用句の抽出: 引用符 "' で囲まれた部分を抽出するためにこれらの関数を使用します。forward_until_char を使用して引用の開始を見つけ、backward_until_char で終了を探します。

機会があれば利用してみてはいかがでしょうか。

コメント

タイトルとURLをコピーしました