正規表現とどっちが早い?

5月 22nd, 2017

ずるずると正規表現を勉強中。

正規表現はいろいろできるけど、遅い、という話を良く見る。どのくらいなのか、末尾一致チェックの方法を覚えたので、ちょっと試してみた。

単純に1対1だと、圧倒的にendswithを使う方が早い。単にチェックさせるだけなら、1,000やそこらチェックしてもdatetimeを使った計測では所要時間が見えないくらいに早い。

ただ、正規表現の柔軟性が活躍できる場面だと、だんだん逆転してくる。あまり良いサンプルではないかもしれないが、とりあえず、下記を走らせてみた。

#codint:UTF-8

import re
import datetime

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

t1=datetime.datetime.today()
p=re.compile('よろしく.?$')
for i in range (0,10000):
    for st in slist:
        m=p.search(st)
t2=datetime.datetime.today()
sa1=t2-t1

t1=datetime.datetime.today()
for i in range (0,10000):
    for st in slist:
        j=st.endswith('よろしく')
        k=st.endswith('よろしくね')
        l=st.endswith('よろしくな')
t2=datetime.datetime.today()
sa2=t2-t1

print (sa1)
print (sa2)

slist中身をマッチング×10,000回。ただ、マッチングだけをさせているので、何の役にも立たない仕事をさせているが…それはさておき。

この辺りになってくると、正規表現の方がだんだん有利になってくる。「よろしく!」等にもまとめてマッチさせたい場合は、断然正規表現を使った方が楽だ。endswithだと、全て一つ一つ確認して追加する必要がある。

ただ、他方、正規表現だと、思わぬものがマッチする可能性がある。

。。。悩ましい・・・

関連記事

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

Comments are closed.