Извлечь часть соответствия регулярному выражению

Я хочу, чтобы регулярное выражение для извлечения заголовка из HTML-страницы. В настоящее время у меня есть это:

title = re.search('.*', html, re.IGNORECASE).group()
if title:
    title = title.replace('', '').replace('', '') 

Есть ли регулярное выражение для извлечения только содержимого <название> так что я ненужно удалить теги?

 Phil25 мая 2017 г., 01:30
Название вопроса говорит само за себя - приведенный примерпроисходит быть HTML, но общая проблема ... общая.
 hoju27 авг. 2009 г., 04:02
вау я могуНе верьте всем ответам, призывающим проанализировать всю HTML-страницу просто для извлечения простого заголовка. Какое излишество!

Ответы на вопрос(8)

отека для разбора всего вашего HTML-документа.

soup = BeatifulSoup(html_doc)
titleName = soup.title.name
 endre21 окт. 2013 г., 09:52
Я хотел бы добавить, что Beautifulsoup также анализирует неполный HTML, и что 'очень мило.

Пожалуйста, НЕ используйте regex для разбора языков разметки. Используйте lxml или beautifulsoup.

 ewwink08 нояб. 2018 г., 12:33
неправильное утверждение,beautifulsoup только помощник для тех, кто знаком сJavascript но нетRegex, BeautifulSoup использовать больше регулярных выражений, так что он будет больше вашего процессора. дон»Не используйте его, если вы знаете регулярное выражение и хотите скорость.
 F Lekschas21 сент. 2018 г., 21:40
Мне любопытно: как можно lxml или beautifulsoup?извлечь часть регулярного выражения "?
 Calimo24 июл. 2018 г., 09:30
Хотя я склонен согласиться с этим ответом относительно конкретного приведенного примера, вопрос более широкий (Извлечь часть соответствия регулярному выражению), и этот ответ не даетT ответить на это.
 tonfa25 авг. 2009 г., 12:43
Это зависит от варианта использования, иногда желательно быстрое и грязное решение (особенно если вы нене хочу обрабатывать все возможные варианты ввода).
 iElectric25 авг. 2009 г., 12:52
Требуется 2 минуты, чтобы написать HTML-код, чтобы эти регулярные выражения потерпели неудачу или вернулись назад и, таким образом, потребляли циклы ЦП.
 SingleNegationElimination25 авг. 2009 г., 20:55
@tonfa: я не согласен. Многие сайты, кажется, идут на все, чтобы их было очень трудно очистить. Если вы просматриваете сайт, вы упускаете красивую и прибыльную рекламу, которую они хотят, чтобы вы прочитали.
 tonfa25 авг. 2009 г., 13:10
Но при очистке сайта они неОбычно они меняют html с целью взлома вашего синтаксического анализатора (и в некоторых случаях вам уже нужно полагаться на структуру сгенерированного html, а не просто на дерево html для извлечения дополнительной информации).
Решение Вопроса

использование( ) в регулярном выражении иgroup(1) в Python, чтобы получить захваченную строку (re.search вернусьNone если это не такне найти результат, такдон»т использоватьgroup() непосредственно):

title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE)

if title_search:
    title = title_search.group(1)
 Krzysztof Krasoń25 авг. 2009 г., 20:30
да, но большинство людей забывают об исключениях и очень удивляются, когда видят их во время выполнения :)
 tonfa25 авг. 2009 г., 12:52
Если ты'Если вы ничего не делаете, если заголовок не найден, почему было бы плохо использовать group () напрямую? (вы можете поймать исключение в любом случае)

re.search('(.*)', s, re.IGNORECASE).group(1)

Я думаю, этого должно быть достаточно:

#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)

... при условии, что ваш текст (HTML) находится в переменной с именем "текст."

Это также предполагает, что нет других HTML-тегов, которые могут быть юридически встроены в тег HTML TITLE, и нет никакого способа юридически встроить любой другой < символ внутри такого контейнера / блока.

тем не мение ...

Дон»Используйте регулярные выражения для разбора HTML в Python. Используйте анализатор HTML! (Если только ты не'Мы собираемся написать полный синтаксический анализатор, который будет дополнительной работой, когда различные стандартные синтаксические анализаторы HTML, SGML и XML уже находятся в стандартных библиотеках.

Если ваша обработка "реальный мир" бирочный суп HTML (который часто не соответствует любому валидатору SGML / XML), затем используйтеBeautifulSoup пакет. Это н't в стандартных библиотеках (пока), но широко рекомендуется для этой цели.

Другой вариант:LXML ... который написан для правильно структурированного (соответствующего стандартам) HTML. Но у него есть возможность отказаться от использования BeautifulSoup в качестве парсера:ElementSoup.

Пытаться:

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
 tonfa25 авг. 2009 г., 12:41
Вы должны использовать.*? так что в случае, если есть несколько в документе (вряд ли, но вы никогда не знаете).
 tonfa25 авг. 2009 г., 12:45
@iElectric: если хочешь, можешь попробовать, кроме блока, правда?
 iElectric25 авг. 2009 г., 12:37
Если вы действительно хотите использовать REGEX для разбора HTML, неt .group () не запускается напрямую при совпадении, поскольку может возвращать None.

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)

Предоставленные фрагменты кода не справляются сExceptions Могу ли я предложить

getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]

По умолчанию возвращается пустая строка, если шаблон не найден или первое совпадение.

Ваш ответ на вопрос