Python: マッチした文字列を取得する group()
Pythonの正規表現を使った検索で、 search()関数やmatch()関数でパターンにマッチした場合は、 戻り値として matchオブジェクトが戻ってきます。 そこからマッチした文字列を取得する場合は、 matchオブジェクトの group()メソッドを使います。
ここではgroup()メソッドの使い方を解説します。
group()メソッドの書式
書式
matchオブジェクト.group([グループ番号])
戻り値はマッチした文字列です。引数を指定しないか0を指定した場合は マッチした全体の文字列を返します。 検索パターンをグループ化した場合はグループ番号を指定できます。
グループ番号を指定しない場合 group()
パターン指定において、丸括弧()によるグループ化をしていない場合は、 group()メソッドの引数にグループ番号を指定する必要はありません。 (指定するとエラーが発生します)
import re p = "<b>.+</b>" s = "<div><b>hello</b></div>" # 正規表現で検索 m = re.search(p, s) if m: # matchオブジェクト print(m) # マッチした文字列 print(m.group()) # <b>hello</b>
最初の「print(m)」でmatchオブジェクトの内容を出力して、 2番目の「print(m.group())」でマッチした文字列を出力しています。 違いを実行結果で確認してください。
実行結果
<re.Match object; span=(5, 17), match='<b>hello</b>'> <b>hello</b>
グループ番号を指定する場合 group(n)
次のコードでは、パターン指定時に丸括弧()を使ってグループ化しています。 ですからgroup()メソッドの引数にグループ番号を指定することができます。
import re p = "<b>(.+?)</b><b>(.*?)</b>" s = "<div><b>hello</b><b>world</b></div>" # 正規表現で検索 m = re.search(p, s) if m: # matchオブジェクト print(m) # マッチした文字列 print(m.group()) # <b>hello</b><b>world</b> print(m.group(1)) # hello print(m.group(2)) # world
print()関数を4つ記述しています。 それぞれのprint()関数において、どのような内容が出力されるのかを 実行結果で確認してください。
実行結果
<re.Match object; span=(5, 29), match='<b>hello</b><b>world</b>'> <b>hello</b><b>world</b> hello world