re.findallで、文字列のグループをタプルで取り出す。
今日は、『つくってマスターPython』の第4章 “文書を処理する” で学んだことをアウトプットします
名前・電話番号・メールアドレスを分解
規則的に入力された文章から「電話番号とメールアドレス」を正規表現のパターンで指定して取り出してみます。
import re
data = '''
太郎 090-(999)-999 taro@yamada.san
花子 080-(888)-888 hanako@flower.shop
幸子 070-(777)-777 sachico@happy.lady
'''
result = re.findall(r'(\S+)\s+([\()\d-]+)\s+([\w.-_]+@[\w.-_]+)', data)
print('*名前')
for item in result:
print(item[0])
print('\n*電話番号')
for item in result:
print(item[1])
print('\n*メールアドレス')
for item in result:
print(item[2])
かなり長いパターンが入力されていますが、よく見ると、3つのグループとその間を結ぶ部分に分かれていることがわかります。
3つのグループには、それぞれ名前・電話番号・メールアドレスが取り出されます。
正規表現のパターンでのグループは、()記号で指定するのでしたね。
findallの戻り値
findallでは、パターンに合致した文字列部分から、グループ指定された部分をタプルにまとめたものとして値が得られます。ここでは3つのグループがありますから、これらのグループに合致する3つの文字列がタプルになった値が取り出されます。
探しだしたそれぞれのタプルのリストがfindallで取り出されるのです。
イマイチ理解しづらかったので、IPythonコンソールにて、resultを表示させてみました。
result
Out[14]:
[('太郎', '090-(999)-999', 'taro@yamada.san'),
('花子', '080-(888)-888', 'hanako@flower.shop'),
('幸子', '070-(777)-777', 'sachico@happy.lady')]
確かに、3つの文字列がタプルになったリストが取り出されていますね。
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪