什么是更快的操作,re.match / search或str.find?

对于一个stringsearch,简单地使用str.find / rfind比使用re.match / search更快吗?

也就是说,对于给定的strings,我应该使用:

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运算符,因为它更容易阅读,而且因为速度更快。

用这个:

 if 'lookforme' in s: do something 

正则expression式需要首先编译,这会增加一些开销。 Python的正常stringsearch非常有效。

如果你search相同的术语很多,或者当你做更复杂的事情时,正则expression式变得更有用。

如果你反复search同样的东西,re.compile会加快正则expression式的速度。 但是在比赛之前,我用“in”来挑选出不好的情况,从而大大提高了速度。 轶事,我知道。 〜奔