Python: 正規表現でマッチした文字列をイテレータで取得 finditer()

Pythonの正規表現でマッチ部分をイテレータとして取得する場合は、 finditer()関数を使います。

マッチ部分をリストとして取得するにはfindall()関数を使いますが、 finditer()はイテラブルなオブジェクトとして取得できます。

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

戻り値は「matchオブジェクト」を要素とするイテレータです。

次のコードは、 HTMLの li 要素のテキスト部分をfinditer()関数を使って取得します。

import re

# パターン
p = "<li>(.*?)</li>"

# 検索対象文字列
s = """<ul>
<li>リストA</li>
<li>リストB</li>
<li>リストC</li>
</ul>
"""

# 検索
itr = re.finditer(p, s)

print(itr)

for m in itr:
	print(m)
	print(m.group(1))

「print(m)」の表示結果で、 各要素にmatchオブジェクトが格納されていることがわかります。
「print(m.group(1)」で li 要素のテキスト部分のみを表示しています。

実行結果
<callable_iterator object at 0x000002C0BBCEF088>
<re.Match object; span=(5, 18), match='<li>リストA</li>'>
リストA
<re.Match object; span=(19, 32), match='<li>リストB</li>'>
リストB
<re.Match object; span=(33, 46), match='<li>リストC</li>'>
リストC