什么是更快的操作,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”来挑选出不好的情况,从而大大提高了速度。 轶事,我知道。 〜奔