Извлечение части совпадения регулярных выражений
Я хочу, чтобы регулярное выражение для получения названия из HTML-страницы. В настоящее время у меня есть это:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
есть ли регулярное выражение для извлечения только содержимого
8 ответов:
использовать
(
)
в регулярном выражении иgroup(1)
в python для получения захваченной строки (re.search
вернутсяNone
если он не находит результат, так не используйтеgroup()
напрямую):title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE) if title_search: title = title_search.group(1)
пожалуйста, не используйте регулярное выражение для разбора языков разметки. Используйте lxml или beautifulsoup.
попробуйте использовать группы захвата:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
могу я порекомендовать вам красивый суп. Суп-это очень хорошая библиотека для разбора всего вашего html-документа.
soup = BeatifulSoup(html_doc) titleName = soup.title.name
предоставленные куски кода не справляются с
Exceptions
Могу я предложитьgetattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
Это возвращает пустую строку по умолчанию, если шаблон не был найден, или первый матч.
Я думаю, что этого должно хватить:
#!python import re pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE) pattern.search(text)
... предполагая, что ваш текст (HTML) находится в переменной с именем "text."
это также предполагает, что нет других тегов HTML, которые могут быть юридически встроены в тег заголовка HTML и нет способа юридически встроить любой другой символ
...
Не используйте регулярные выражения для разбора HTML в Python. Используйте парсер HTML! (За исключением вы собираетесь написать полный парсер, который будет дополнительной работой, когда различные Парсеры HTML, SGML и XML уже находятся в стандартных библиотеках.
Если ваша обработка "реальный мир"tag soup HTML (который является часто несоответствующим, чтобы любой валидатор формата SGML/XML), который затем использовать BeautifulSoup. Его нет в стандартных библиотеках (пока), но широко рекомендуется для этой цели.
другой вариант: lxml ... какой написано Для правильно структурированного (соответствующего стандартам) HTML. Но у него есть возможность вернуться к использованию BeautifulSoup в качестве парсера: ElementSoup.