Python 入門

ホーム > 正規表現 > findall で全てのマッチを簡単に取得

findall で全てのマッチを簡単に取得

match や search は、マッチオブジェクトを返すので複雑な処理をすることができますが、 マッチしたものをとってこれれば十分だ、という場合も少なくないでしょう。

例えば、ある文字列の中から数字の部分だけ拾ってくることを考えます。マッチした部分を持ってくるだけなら、findall 関数が便利です。

findall 関数は、文字列中にパターンでマッチした文字列を返します。また、パターンにグループが含まれる場合はコレクションが返ります(文字列のタプル)。

一つ目の具体例です。グループを含まない場合で、数字を拾ってきます。

import re

match = re.findall(r'[0-9]+', 'xxxx1aaaa22cc333ssss')

for m in match:
	print m

実行結果は次の通り

1
22
333

二つ目の具体例は、パターンにグループを含んでみましょう。

import re

s = """
Mike:123-456-7890 abc
John: 098.765.4321
"""

for m in re.findall(r'(\w+):[ \t]*(\d{3})[.-](\d{3})[.-](\d{4})', s):
	print m

名前: に続いて、電話番号らしきものがあったときにとってくるような場合です。実行結果は次の通りです。

('Mike', '123', '456', '7890')
('John', '098', '765', '4321')
ホーム > 正規表現 > findall で全てのマッチを簡単に取得