2007-11-06

[メモ]正規表現モジュール re のscanner機能

Pythonのドキュメントには書かれていないが、正規表現モジュール(re)にはscannerという機能がある。
一旦作成した正規表現オブジェクトで、長い文章中をスキャンしていくような感じで、全てのマッチする部分を検出していく機能だ。
便利なんだが、使いたい時に毎回使い方を忘れているのでこの際ここにメモしておこう。

>>> a="aaabbbcccdddaaa111fffsss"
>>> import re
>>> pat = re.compile(r"aaa(...)")
>>> dir(pat)
['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner',
'search', 'split', 'sub', 'subn']
>>> scanner = pat.scanner(a)
>>> dir(scanner)
['match', 'search']
>>> m = scanner.search()
>>> m
<_sre.SRE_Match object at 0x2a98006210>
>>> m.groups()
('bbb',)
>>> m = scanner.search()
>>> m.groups()
('111',)
>>> m = scanner.search()
>>> m
>>> #もう候補がないので m = None となっている。