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)