Задать вопрос
@rodion-dev

Как ускорить регулярные выражения в python?

как ускорить регулярные выражения в python ?
используется стандартный re

по html документу прогоняется примерно 3000 регулярных выражений
вида "str(?:/([\\d.]+))" но есть и более сложные.

скорость составляет около 1 секунды.
как увеличить раз в 10 или более ?

возможен вариант с реализацией на других языках, например C++
  • Вопрос задан
  • 1293 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
adugin
@adugin Куратор тега Python
Нужно увеличить кэш:
>>> import re
>>> re._MAXCACHE
100
>>> re._MAXCACHE = 3000
>>> re._MAXCACHE
3000

Подозреваю, что при этом re.compile() в явном виде использовать не обязательно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
bobrovskyserg
@bobrovskyserg
Регулярные выражения предварительно откомпилированы?
Если нет - сделайте это.
Если да - десятикратного выигрыша при переходе на C++ не будет, и не надейтесь.
Питоновский движок re написан на C и сопоставим по быстродействию с реализациями в библиотеках других языков.
Так что:
1. Препроцессинг html - наверняка можно отсечь ненужные куски и выкусить ненужные блоки, прежде чем натравливать на него 3000 паттернов
2. Еще более глубокий препроцессинг - разбиение html на атомарные фрагменты с тем, чтобы, единожды идентифицировав фрагмент, больше по нему не елозить.
Ответ написан
nightvich
@nightvich
ITman
Используйте асинхронное выполнение кода в 1*х потоков. Прирост производительности должен быть хорошим.
Ответ написан
un1t
@un1t
"str(?:/([\\d.]+))"
Кажется ты забыл точку экранировать \. Ну и два слеша перед d выглядят странно, ты действительно хотел слеш экранировать, или хотел вставить выражение для чисел \d.
Ответ написан
Комментировать
@rodion-dev Автор вопроса
регулярные выражения не я писал. они вообще на js изначально, я их портировал на python поменяв символы.
сам код запускается в сотни потоков.

выражения предварительно компилируются.

смысл задачи в том чтобы по 100млн html документов прогнать 3000 регулярных выражений максимально быстро.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы