finditer()を使って正規表現をforループで回す
- re.finditer()メソッドに(検索に使う文字列, 検索する文字列)を渡すと反復処理可能な形にできる。
- ?P<変数名>という形にすると、正規表現を変数にすることも可能
これはちょっとわかりにくいと思います。実際のコードを見てみましょう。
finditer()を使ったPythonコード
import re name_regex = '(?P<first_name>[A-Z]\w+) (?P<last_neme>[A-Z]\w+)' names = 'Barack Obama, Ronald Reaga, Nanyc Drew' for name in re.finditer(name_regex, names): print('Meet {}!'.format(name.group('first_name')))
[A-Z]\w+という意味がわからないことにははじまりませんが、first_nameというものを変数にしています。正規表現は非常に説明が難しいです。ここではfinditer()で反復処理可能な形にできることを紹介したかったです。
「貪欲マッチ」と「非貪欲マッチ」
正規表現の考え方で「貪欲マッチ」と「非貪欲マッチ」というものがあります。それぞれの特徴は下記のとおりです。
「貪欲マッチ」 | 貪欲マッチはマッチしたもの全てを見つけてきます。finditer()はこれに該当します。 |
---|---|
「非貪欲マッチ」 | マッチした先頭の要素を返します。match()メソッドがこれに該当します。 |
話は変わりますがname_regex = ‘( ) ( )’という形でかっこがあります。これが正規表現のグループです。matchは先頭要素があったらそれだけ返しますが、同時にgroupも返します。ここではコードを書いていませんが、注意すべき点です。
正規表現を学ぶのに役立つリンク集
人に紹介できるほどの知識ではありませんが、よろしければどうぞ。
コメント