1. ホーム
  2. python

re.match/searchとstr.find、どちらが高速な処理ですか?

2023-09-16 23:25:06

質問

単発の文字列検索では、re.match/searchを使うよりもstr.find/rfindを単純に使った方が速いのでしょうか?

つまり、与えられた文字列、sに対して、私は使うべきでしょうか。

if s.find('lookforme') > -1:
    do something

または

if re.match('lookforme',s):
    do something else

?

どのように解決するのですか?

どちらが速いか、という質問には timeit .

from timeit import timeit
import re

def find(string, text):
    if string.find(text) > -1:
        pass

def re_find(string, text):
    if re.match(text, string):
        pass

def best_find(string, text):
    if text in string:
       pass

print timeit("find(string, text)", "from __main__ import find; string='lookforme'; text='look'")  
print timeit("re_find(string, text)", "from __main__ import re_find; string='lookforme'; text='look'")  
print timeit("best_find(string, text)", "from __main__ import best_find; string='lookforme'; text='look'")  

と出力されます。

0.441393852234
2.12302494049
0.251421928406

ということは、単に in 演算子を使った方が読みやすいからというだけでなく、より高速に処理できるからです。