Python: 正規表現で検索する re.search()

Pythonで正規表現を使って検索する場合、reモジュールsearch()関数を使うとパターンにマッチするかどうかがわかります。

ここではsearch()関数の書式やマッチした場合の文字列の取得方法、 マッチする・しないで処理を分岐させる方法などを解説します。

serach()関数の書式

書式
search(パターン, 検索対象文字列 [, flags=0])

引数には検索パターン検索対象文字列、 必要であれば検索フラグを指定します。
(関連記事:正規表現での検索フラグ flags

検索パターンにマッチする場合はマッチ情報が格納されたmatchオブジェクトが戻り、 マッチしない場合は「None」が戻ります。

マッチする場合

マッチする場合、どのような情報が取得できるのかを見てみます。

次のコードは変数「p」がパターン文字列、変数「s」が検索対象文字列です。 HTMLコードの一部を記述した検索対象文字列 s の中から b タグがあるかどうかを検索します。
(「imoprt re」を忘れずに記述してください)

import re

p = "<b>.+</b>"
s = "<div><b>hello</b></div>"

# 正規表現で検索
m = re.search(p, s)

print(m)
実行結果
<re.Match object; span=(5, 17), match='<b>hello</b>'>

マッチした場合はこのように、 match オブジェクトの内容が表示されます。

マッチした文字列を取得する

matchオブジェクトからマッチした文字列だけを取得したい場合は、 matchオブジェクトの group()メソッドを使います。

import re

p = "<b>.+</b>"
s = "<div><b>hello</b></div>"

# 正規表現で検索
m = re.search(p, s)

if m:
	# マッチする場合
	print(m.group())
else:
	# マッチしない場合
	print(m)

「matchオブジェクト.group()」でマッチした文字列が取得できます。

実行結果
<b>hello</b>

group()メソッドについては次の記事も参考にしてください。
(関連記事:マッチした文字列を取得する group()

マッチしない場合

次はマッチしない場合を見てみます。

HTMLコードの中から i タグがあるかどうかを検索します。

import re

p = "<i>.+</i>"
s = "<div><b>hello</b></div>"

# 正規表現で検索
m = re.search(p, s)

print(m)
実行結果
None

マッチしない場合は「None」が戻ります。

マッチする・しないで処理を分岐させる

if文を使って、 マッチする・しないで処理を分岐させる場合は次のように記述できます。 search()関数の戻り値に何らかの値が入っている場合はTrueで、 「None」の場合はFalseと見なします。

import re

p = "<b>.+</b>"
s = "<div><b>hello</b></div>"

# 正規表現で検索
m = re.search(p, s)

if m:
	# マッチする場合
	print(m)
else:
	# マッチしない場合
	print(m)
Python