我的问题是关于解析日志文件并删除每行上的可变部分以便对它们进行分组。例如:
s = re.sub(r'(?i)User [_0-9A-z]+ is ', r"User .. is ", s)
s = re.sub(r'(?i)Message rejected because : (.*?) \(.+\)', r'Message rejected because : \1 (...)', s)
我有大约 120 多个与上述类似的匹配规则。
在连续搜索 100 个不同的正则表达式时,我没有发现任何性能问题。但是在应用 101 正则表达式时会出现巨大的减速。
将我的规则替换为时会发生完全相同的行为
for a in range(100):
s = re.sub(r'(?i)caught here'+str(a)+':.+', r'( ... )', s)
改用 range(101) 时,速度慢了 20 倍。
# range(100)
% ./dashlog.py file.bz2
== Took 2.1 seconds. ==
# range(101)
% ./dashlog.py file.bz2
== Took 47.6 seconds. ==
为什么会发生这样的事情?是否有任何已知的解决方法?
(发生在 Linux/Windows 上的 Python 2.6.6/2.7.2 上。)