re.comileを変数に入れるかどうかでは、正規表現が単純なためか、意外と変わらない模様です。
#!/usr/bin/env python from benchmarker import Benchmarker import re header_pattern = re.compile(r'^.*----------+.+?----------+', re.DOTALL) annotation_pattern = re.compile(r'[#.*?]') footer_pattern = re.compile(r'\n底本:「.*$', re.DOTALL) head_newline_pattern = re.compile(r'^(?:\u000D|\u000A)+') tail_newline_pattern = re.compile(r'(?:\u000D|\u000A)+$') text = """ 医者と病人 夢野久作 死にかかった病人の枕元でお医者が首をひねって、 「もう一時間も六カしいです」 と言いました。 「とてもこれを助ける薬はありません」 これを聴いた病人は言いました。 「いっその事、飲んでから二、三日目に死ぬ毒薬を下さい」 底本:「夢野久作全集7」三一書房 1970(昭和45)年1月31日第1版第1刷発行 1992(平成4)年2月29日第1版第12刷発行 初出:「九州日報」 1923(大正12)年11月18日 ※底本の解題によれば、初出時の署名は「香倶土三鳥」です。 入力:川山隆 校正:土屋隆 2007年7月21日作成 青空文庫作成ファイル: このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。 """ def main(): print( normalize1(text) ) print('---') print( normalize2(text) ) with Benchmarker(1000*1000, width=20) as bench: @bench('normalize1') def _bm(bm): for i in bm: normalize1(text) @bench('normalize2') def _bm(bm): for i in bm: normalize2(text) def normalize1(text): text = re.sub(header_pattern, r'', text) text = re.sub(annotation_pattern, r'', text) text = re.sub(footer_pattern, r'', text) text = re.sub(head_newline_pattern, r'', text) text = re.sub(tail_newline_pattern, r'', text) return text def normalize2(text): text = re.sub(re.compile(r'^.*----------+.+?----------+', re.DOTALL), r'', text) text = re.sub(re.compile(r'[#.*?]'), r'', text) text = re.sub(re.compile(r'\n底本:「.*$', re.DOTALL), r'', text) text = re.sub(re.compile(r'^(?:\u000D|\u000A)+'), r'', text) text = re.sub(re.compile(r'(?:\u000D|\u000A)+$'), r'', text) return text main()
出力:
医者と病人 夢野久作 死にかかった病人の枕元でお医者が首をひねって、 「もう一時間も六カしいです」 と言いました。 「とてもこれを助ける薬はありません」 これを聴いた病人は言いました。 「いっその事、飲んでから二、三日目に死ぬ毒薬を下さい」 --- 医者と病人 夢野久作 死にかかった病人の枕元でお医者が首をひねって、 「もう一時間も六カしいです」 と言いました。 「とてもこれを助ける薬はありません」 これを聴いた病人は言いました。 「いっその事、飲んでから二、三日目に死ぬ毒薬を下さい」 ## benchmarker: release 4.0.1 (for python) ## python version: 3.4.2 ## python compiler: GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56) ## python platform: Darwin-14.3.0-x86_64-i386-64bit ## python executable: /Users/username/.anyenv/envs/pyenv/versions/3.4.2/bin/python ## cpu model: Intel(R) Core(TM) i5-4258U CPU @ 2.40GHz ## parameters: loop=1000000, cycle=1, extra=0 ## real (total = user + sys) normalize1 26.0480 24.3900 24.2000 0.1900 normalize2 29.3381 28.1900 28.0100 0.1800 ## Ranking real normalize1 26.0480 (100.0) ******************** normalize2 29.3381 ( 88.8) ****************** ## Matrix real [01] [02] [01] normalize1 26.0480 100.0 112.6 [02] normalize2 29.3381 88.8 100.0