クロージャによるタグパーサー
呼称: クロージャによるタグパーサー
目的: 任意の区切り文字でタグをパースする(タグの入れ子は不可)
特徴: クロージャを生成する
用例: はてなブックマークのタグを解析する
備考: クロージャの勉強にも良いかも?
2009/10/09 空白文字類を除外するように変更しました。
XML 系ライブラリを読めばもっと良い方法がありそうな気がしますが、取りあえずシンプルに動くものを作ってみました。バグってましたらツッコミください。Python クックブックを読んでいたら、クロージャの説明が面白くて、クロージャを使ってみたくなったというのが本音だったりします(^ ^;;
#!/usr/bin/env python import re whitespace = re.compile('^\s*$') def make_my_parser(start, end): def my_parser(s): l = [] t = s[s.index(start):].split(start) for i in t: if end in i: p = i[0:i.index(end)] if not whitespace.match(p): l.append(p) return l return my_parser def main(): p = make_my_parser('[', ']') q = make_my_parser('(', ')') x = '[list] [touple[iter] [ ] dictionary [python module of the week]' print 'original: ' + x print 'tag list: ' + str(p(x)) y = 'closer) ([plone]) zope) (((django)(pylucene) (idle)' print 'original: ' + y print 'tag list: ' + str(q(y)) if __name__ == '__main__': main()
実行結果。
$ python my_parser.py original: [list] [touple[iter] [ ] dictionary [python module of the week] tag list: ['list', 'iter', 'python module of the week'] original: closer) ([plone]) zope) (((django)(pylucene) (idle) tag list: ['[plone]', 'django', 'pylucene', 'idle']
リファレンス:
第 3 回 再帰定義と高階関数