Python: マッチした文字列を取得する group()

Pythonの正規表現を使った検索で、 search()関数やmatch()関数でパターンにマッチした場合は、 戻り値として matchオブジェクトが戻ってきます。

そこからマッチした文字列を取得する場合は、 matchオブジェクトの 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)

次のコードでは、パターン指定時に()丸括弧を使ってグループ化しています。 ですからグループ番号を指定することができます。

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()関数において、どのような内容が出力されるのかを 実行結果で確認してください。

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