Я хочу, чтобы регулярное выражение извлекало заголовок из HTML-страницы. В настоящее время у меня есть это:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Есть ли регулярное выражение для извлечения только содержимого <title>, чтобы мне не нужно было удалять теги?
Ответы:
Используйте
(
)
в regexp иgroup(1)
в python для получения захваченной строки (re.search
вернется,None
если не найдет результат, поэтому не используйтеgroup()
напрямую ):источник
import re
иначе получишьNameError: name 're' is not defined
Обратите внимание, что, начиная
Python 3.8
с введения выражений присваивания (PEP 572) (:=
оператор), можно немного улучшить решение Кшиштофа Красоня, зафиксировав результат сопоставления непосредственно в условии if в качестве переменной и повторно используя его в теле условия. :источник
Попробуйте использовать группы захвата:
источник
источник
Могу я порекомендовать вам Beautiful Soup. Soup - очень хорошая библиотека для анализа всего вашего html-документа.
источник
Пытаться:
источник
.*?
это, если</title>
в документе их несколько (маловероятно, но вы никогда не знаете).Предоставленные фрагменты кода не подходят
Exceptions
. Могу я предложитьПо умолчанию это возвращает пустую строку, если шаблон не был найден, или первое совпадение.
источник
Думаю, этого должно хватить:
... предполагая, что ваш текст (HTML) находится в переменной с именем "text".
Это также предполагает, что нет других тегов HTML, которые могут быть легально встроены в тег HTML TITLE, и нет способа легально встроить любой другой символ <в такой контейнер / блок.
Однако ...
Не используйте регулярные выражения для синтаксического анализа HTML в Python. Используйте парсер HTML! (Если вы не собираетесь писать полноценный синтаксический анализатор, что потребует дополнительной работы, когда различные синтаксические анализаторы HTML, SGML и XML уже находятся в стандартных библиотеках.
Если вы обрабатываете «реальный» тег HTML (который часто не соответствует никаким валидаторам SGML / XML), используйте пакет BeautifulSoup . Его нет в стандартных библиотеках (пока), но для этой цели рекомендуется.
Другой вариант: lxml ..., который написан для правильно структурированного (соответствующего стандартам) HTML. Но у него есть возможность вернуться к использованию BeautifulSoup в качестве парсера: ElementSoup .
источник