python - compile - Extraer parte de un partido regex
re compile string (8)
Intenta usar grupos de captura:
title = re.search(''<title>(.*)</title>'', html, re.IGNORECASE).group(1)
Quiero una expresión regular para extraer el título de una página HTML. Actualmente tengo esto:
title = re.search(''<title>.*</title>'', html, re.IGNORECASE).group()
if title:
title = title.replace(''<title>'', '''').replace(''</title>'', '''')
¿Hay una expresión regular para extraer solo el contenido de <title> para que no tenga que eliminar las etiquetas?
Los códigos de código proporcionados no son compatibles con las Exceptions
puedo sugerir
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), ''groups'', lambda:[u""])()[0]
Esto devuelve una cadena vacía de forma predeterminada si no se ha encontrado el patrón, o la primera coincidencia.
Pensaría que esto debería ser suficiente:
#!python
import re
pattern = re.compile(r''<title>([^<]*)</title>'', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... asumiendo que su texto (HTML) está en una variable llamada "texto".
Esto también supone que no hay otras etiquetas HTML que se puedan incrustar legalmente dentro de una etiqueta TÍTULO HTML y no hay forma de incrustar legalmente ningún otro carácter <dentro de tal contenedor / bloque.
Sin embargo ...
No utilice expresiones regulares para el análisis de HTML en Python. Utilice un analizador de HTML! (A menos que vaya a escribir un analizador completo, lo que sería un trabajo extra cuando varios analizadores HTML, SGML y XML ya estén en las bibliotecas estándar.
Si utiliza el HTML de sopa de etiquetas "del mundo real" (que con frecuencia no es compatible con ningún validador SGML / XML), utilice el paquete BeautifulSoup . No está en las bibliotecas estándar (todavía), pero se recomienda ampliamente para este propósito.
Otra opción es: lxml ... que está escrito para HTML correctamente estructurado (conforme a las normas). Pero tiene una opción para usar BeautifulSoup como un analizador: ElementSoup .
Te recomiendo a Beautiful Soup. La sopa es una buena libra para analizar todo tu documento html.
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
Tratar:
title = re.search(''<title>(.*)</title>'', html, re.IGNORECASE).group(1)
re.search(''<title>(.*)</title>'', s, re.IGNORECASE).group(1)
Por favor, NO use expresiones regulares para analizar lenguajes de marcado. Utilice lxml o beautifulsoup.