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

正規表現で検索 search()

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

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

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

マッチする場合

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

次のコードは変数「p」がパターン文字列、変数「s」が検索対象文字列です。 HTMLコードの中から 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 オブジェクトの内容が表示されます。

マッチしない場合

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

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

import re

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

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

print(m)
実行結果
None

マッチしない場合は「None」と表示されます。

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

if文を使って、 マッチする・しないで処理を分岐させる場合は次のように記述できます。

import re

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

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

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

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

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>