Сопоставление пары комментариев в HTML с помощью регулярных выражений
-
09-09-2019 - |
Вопрос
У меня есть шаблон Мако, который выглядит примерно так:
% if staff:
<!-- begin staff -->
...
<!-- end staff -->
% endif
Таким образом, если я передам переменную Staff как True, эти комментарии должны появиться.Я пытаюсь проверить это, используя регулярное выражение, которое выглядит так:
re.search('<!-- begin staff -->.*<!-- end staff -->', text)
Я проверил, что комментарии появляются в выводе HTML, но регулярное выражение не соответствует.Я даже пробовал оставлять комментарии (<!-- begin staff -->
и <!-- end staff -->
) через re.escape, но все равно безуспешно.Что я делаю не так?
Или есть лучший способ запустить этот тест?
Решение
По умолчанию .
не соответствует символу новой строки — вам нужно добавить re.DOTALL
вариант.
re.search('<!-- begin staff -->.*<!-- end staff -->', text, re.DOTALL)
Если у вас более одного раздела персонала, вы также можете сделать сопоставление нежадным:
re.search('<!-- begin staff -->.*?<!-- end staff -->', text, re.DOTALL)
Другие советы
Используйте парсер HTML, например HTMLПарсер вместо.Видеть Можете ли вы привести несколько примеров того, почему сложно анализировать XML и HTML с помощью регулярных выражений? почему.