Моя проблема заключается в анализе файлов журнала и удалении переменных в каждой строке, чтобы сгруппировать их. Например:
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)
При использовании диапазона (101) он был в 20 раз медленнее.
# range(100)
% ./dashlog.py file.bz2
== Took 2.1 seconds. ==
# range(101)
% ./dashlog.py file.bz2
== Took 47.6 seconds. ==
Почему такое происходит? И есть ли какое-нибудь известное обходное решение?
(происходит на Python 2.6.6/2.7.2 на Linux/Windows.)