我想使用通用前缀(/ files)匹配URL,但在其下仅匹配两个特定目录(图像和视频)。我可以想到两个正则表达式:/files/(images/.*|videos/.*)
和/files/(image|video)s/.*
我在这里有两个问题:
性能对我很重要,因为我将使用它来匹配数十亿个字符串。因此,任何微小的改进对我也很重要。
最佳答案
Python 2.7说:
import timeit
once = 'import re; m="/files/images/test"'
num = 1000000
print timeit.timeit(stmt='re.findall(r"/files/(images/.*|videos/.*)", m)', setup=once, number=num)
-> 1.5884420871734619
print timeit.timeit(stmt='re.findall(r"/files/(image|video)s/.*", m)', setup=once, number=num)
-> 1.5990869998931885
这使用了100万次正则表达式,并且在两次运行两次之后,两者的速度相同。
Python可能会缓存已编译的正则表达式...
我用
您的第一个版本(
/files/(images/.*|videos/.*)
)在我的测试中运行速度加快了(0.1秒)