Как ускорить поиск регулярных выражений в файле CSS - PullRequest
3 голосов
/ 05 февраля 2020

Я использую регулярное выражение, чтобы найти все селекторы в файлах CSS, и иногда он загружается в течение нескольких минут. Посмотрев файлы, я обнаружил, что sourceMappingURL действительно большой и вызывает проблему:

sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndvb2QuZnVsbC5taW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJpQkFFQSw4QkFBOEIsU0FBUyxPQUFPLGlCQUFpQixPQUFPLEtBQUssb0JBQW9CLEtBQUssUUFBUSxPQUFPLEVBQUUsU0FBUyxtQkFBbUIsSUFBSSxRQUFRLFdBQVcsT0FBTyxvQkFBb0IsNEJBQTRCLE9BTyxL...

Вот полный файл CSS: https://jsfiddle.net/jj_jaq/32d7hpc0/3/

Вот мое регулярное выражение:

selectors = re.findall(r'([.#\w][-\w,\s.]+)(\{(.*?)\})', content)

Есть ли способ ускорить мое регулярное выражение?

1 Ответ

1 голос
/ 05 февраля 2020

Вы можете указать механизму регулярных выражений привязывать совпадения к левым границам слова. Однако простое добавление \b не сработает, так как первый символ, который вы хотите сопоставить, также может быть . или #, не являющимися символами.

Использовать

[.#]?\b([-\w,\s.]+){([^{}]*)}

См. Демонстрационный пример regex , где [.#]? соответствует необязательному . или # перед проверкой границы слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...