Python re.search() メソッド

Python re モジュール


re.search()は Pythonreモジュール内でパターンを検索するための関数であり、文字列内でスキャンして検索し指定された正規表現にマッチする最初の位置を探します。

とre.match()とは異なり、re.search()文字列の先頭からマッチする必要はなく、文字列内の任意の位置でマッチを検索します。

単語の意味: search「検索」「探す」という意味です。


基本構文とパラメータ

re.search()はモジュールレベルの関数であり、直接reモジュールから呼び出します。

構文形式

re.search(pattern, string, flags=0)

パラメータの説明

  • pattern:
    • 型:文字列 (str)
    • 説明:マッチさせる正規表現パターン。
  • string:
    • 型:文字列 (str)
    • 説明:検索対象の文字列。この中でマッチを検索します。
  • flags:
    • 型:整数 (int, オプション)
    • 説明:正規表現フラグ。マッチングモードを制御します。例:re.IGNORECASE、re.MULTILINEなど。

関数の説明

  • 戻り値: マッチが見つかった場合は、matchオブジェクトを返します。マッチが見つからない場合は、None。
  • 効果: 最初のマッチの位置情報を返します。マッチした内容、開始位置、終了位置を含みます。

例

簡単なものから複雑なものまでの一連の例を通して、re.search()の使い方を完全にマスターしましょう。

例1:基本的な使い方 - 最初のマッチを検索

例

import re

# 文字列内で最初に一致する数字を検索する
text = Python 3.9 は最もよく使われているバージョンです
result = re.search(r'\d+\.\d+', text)

if result:
    print("找到匹配:", result.group())  # 输出: 3.9
    print("匹配起始位置:", result.start())  # 输出: 7
    print("匹配结束位置:", result.end())  # 输出: 10

実行結果の予想:

找到匹配: 3.9
匹配起始位置: 7
匹配结束位置: 10

コード解説:

  1. r'\d+\.\d+'1つ以上の数字、続いてドット、さらに1つ以上の数字(バージョン番号形式)にマッチします。
  2. re.search()最初のマッチ位置のオブジェクトを返します。
  3. result.group()マッチしたテキスト内容を返します。
  4. result.start()とresult.end()マッチした位置のインデックスを返します。

例2:任意の位置でのマッチ検索

re.search()は文字列内の任意の位置で検索できます。これがre.match()との主な違いです。

例

import re

text = "私の携帯番号は138-1234-5678で、彼の携帯番号は139-9876-5432です。"

# 查找第一个手机号
result = re.search(r'\d{3}-\d{4}-\d{4}', text)

if result:
    print("第一个手机号:", result.group())

実行結果の予想:

第一个手机号: 138-1234-5678

コード解説:

  • \d{3}-\d{4}-\d{4}中国の携帯電話番号形式(3桁-4桁-4桁)にマッチします。
  • re.search()最初のマッチを見つけたら返し、それ以上検索しません。

例3:フラグを使用して大文字と小文字を無視

パラメータによってflagsマッチング動作を変更できます。例:大文字と小文字を無視。

例

import re

text = "Python is a Powerful Programming Language"

# 使用 re.IGNORECASE 忽略大小写
result = re.search(r'python', text, re.IGNORECASE)

if result:
    print("找到:", result.group())  # 输出: Python

実行結果の予想:

找到: Python

コード解説:

  • re.IGNORECASEマッチで大文字と小文字を区別しないようにするため、"Python" にマッチできます。

例4:グループの内容を抽出

丸括弧を使用すると()グループを作成し、関心のある特定の部分を抽出できます。

例

import re

text = "用户邮箱: [email protected]"

# グループを使用してユーザー名とドメイン名を抽出する
result = re.search(r'(\w+)@(\w+\.\w+)', text)

if result:
    print("完整匹配:", result.group())      # [email protected]
    print("第1个分组:", result.group(1))    # user
    print("第2个分组:", result.group(2))    # example.com

実行結果の予想:

完整匹配: [email protected]
第1个分组: user
第2个分组: example.com

コード解説:

  • 丸括弧()で2つのグループを作成しました。
  • result.group(1)とresult.group(2)2つのグループの内容をそれぞれ抽出します。

Python re モジュール

その他の拡張