Первое, что приходит мне в голову, это то, что вы должны использовать re.compile () , чтобы подготовить все регулярные выражения. Но я думаю, это уже сделано!
Другая вещь, которую следует учитывать, - это иерархическая обработка:
В зависимости от типа имеющегося регулярного выражения они могут быть организованы иерархически. Таким образом, вы можете предварительно фильтровать строки и передавать их только в регулярные выражения, которые вам нужно проверить.
Например, если вы ищете тег типа «» в регулярном выражении, это может помочь найти строку в строке для «body» в строке, прежде чем проверять, действительно ли это тег. Вы также можете выполнить поиск "<" перед использованием регулярного выражения, связанного с тегом. </p>
Это также может ускорить обработку, если вы объедините несколько выражений в одно и проверите совпадение. Как замена одной проверки для "{term1}" "{term2}" на "{(term1 | term2)}".
Тогда вы можете попытаться отфильтровать, какое регулярное выражение нужно проверять, определив минимальную длину строки, над которой они работают.
Простые подобные вещи могут ускорить ваше приложение без переключения на другой язык или процессор.
Если возможно, вы также можете попытаться использовать многопоточность. В зависимости от загрузки процессора вы можете обрабатывать каждую вторую строку в два потока, что также может значительно ускорить обработку.