Pythonで文字列を検索する:find(), re.search()

Python で文字列を検索する場合は、単純な文字列で検索する find と、正規表現で文字列を検索する re.search メソッドなどがあります。今回はこれらのメソッドの使い方について説明します。

find() を使用して文字列を検索

find の記述方法は以下の通りです。

検索対象の文字列.find(検索する文字列)

引数には検索する文字列を指定します。文字列が見つかった場合は、見つかった文字列の開始位置を返します。見つからなかった場合は -1 を返します。

以下は find メソッドで fox という単語が text にあるかどうか判定するサンプルコードです。

# 検索対象の文字列
text = "The quick brown fox jumps over the lazy dog."

# foxを検索
index = text.find("fox")
if index != -1:
    print "found at", index
else:
    print "not found"

実行結果

found at 16

文字列 text の中には16番目に fox という文字列が存在するので、fox という文字列の開始位置が index に代入されます。

re.search() で正規表現を用いて文字列を検索

正規表現を操作する re モジュールにある search メソッドについて説明します。re.search では正規表現を使用して文字列を取得することができます。

re.search の記述方法は以下の通りです。

MatchObject = re.search(正規表現, 検索対象の文字列)

re.search は第1引数に正規表現パターンを指定し、第2引数に検索したい文字列を指定します。ただし、 find とは違い search は MatchObject のインスタンスを返します。もし検索対象の文字列が存在しない場合は、None を返します。

MatchObject や re モジュールの詳しい説明はこちらの記事を参照してください。

以下は文字列 text に連続した小文字のアルファベットがあるかどうかを検索した例です。

# -*- coding: utf-8 -*-
 
import re
 
# 対象の文字列
text = "012abc345def"
 
# 連続した小文字のアルファベットを検索する
matchObj = re.search(r'[a-z]+', text)
 
if matchObj:
    print matchObj.group() # マッチした文字列: abc
    print matchObj.start() # マッチした文字列の開始位置: 3
    print matchObj.end()   # マッチした文字列の終了位置: 6
    print matchObj.span()  # マッチした文字列の開始位置と終了位置: (3, 6)

text という文字列の中には abc と def という2つの連続したアルファベットが存在しますが、re.search は最初にマッチした文字列の情報しか取得できません。上の例の場合は abc の情報が取得できます。

MatchObjectには他にも様々なメソッドがあります。こちらで紹介されていますので読んでおくと良いでしょう。