正規表現コンパイルする?しない?

5月 24th, 2017

pythonの正規表現は、予めパターンをコンパイル(機械が理解できる機械語に翻訳すること)しておける。何度もそのパターンを使って一致するかチェックしたい場合は、これをしておくと早くなる。

・・・というわけで、ちょいと実験してみた。後、正規パターンの指示は、変数に入れておけるかもついでに実験。

#coding:UTF-8

import re
import datetime

pat='よろしく.?$'

slist=['よろしくね','そんなこんなで、よろしく','よろしくお願いします','困ったらよろしく','ではでは','よろしくな']

t1=datetime.datetime.today()

#コンパイルあり
p=re.compile(pat)
for i in range(0,10000):
    for st in slist:
        m=p.search(st)

t2=datetime.datetime.today()

#コンパイルなし
for i in range(0,10000):
    for st in slist:
        m=re.search(pat,st)

t3=datetime.datetime.today()

print(t2-t1)
print(t3-t2)

じゃじゃーん。正規表現のマッチングパターン(というのかな)は、変数に放り込んでおけることが分かった。ってことは、ファイルに記入しておいて、それを読み込み、次々当てはめてチェック、という技が使える。よしよし。

で、肝心の速度だが、結構な差が出た。コンパイルなしの方が二倍くらい時間がかかっている・・・といっても1秒未満の世界だが。私の環境だとコンパイルありが0.06秒強、なしが0.12秒強といったところだった。

関連記事

  1. 正規表現とどっちが早い?
  2. 正規表現vs類語辞書
  3. 予めコンパイルしてキーワードチェックしたら
  4. 日差と秒差はあるのに分差がない不思議
  5. 時刻の差分を計算したい
  6. Python的漬け物・・・?pickleで散々
  7. 再生チェックをしても止まらなかった原因が分かった
  8. 再びアプリ化…

Comments are closed.