237 votes

Extraire une partie d'une correspondance regex

Je veux une expression régulière pour extraire le titre d'une page HTML. Actuellement, j'ai ceci :

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

Existe-t-il une expression régulière pour extraire uniquement le contenu de <title> afin que je n'aie pas à supprimer les balises ?

364voto

krzyk Points 1044

Utilisez ( ) dans regexp et group(1) dans python pour récupérer la chaîne capturée (re.search renverra None s'il ne trouve pas le résultat, alors n'utilisez pas group() directement) :

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

if title_search:
    title = title_search.group(1)

66voto

Xavier Guihot Points 6414

Notez qu'Python 3.8, et de l'introduction d'expressions d'affectation (PEP 572) (opérateur:=), il est possible d'améliorer un peu la solution de Krzysztof Krason en capturant le résultat de correspondance directement dans la condition if en tant que variable et en le réutilisant dans le corps de la condition :

# pattern = '<title>(.*)</title>'
# text = '<title>hello</title>'
if match := re.search(pattern, text, re.IGNORECASE):
  title = match.group(1)
# hello

12voto

Aaron Maenpaa Points 39173

Essayez d'utiliser les groupes de capture :

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

10voto

iElectric Points 2625

Veuillez NE PAS utiliser regex pour analyser les langages de balisage. Utilisez lxml ou beautifulsoup.

9voto

kharagpur Points 40

Puis-je vous recommander à Beautiful Soup. Soup est une très bonne lib pour analyser tout votre document html.

soup = BeatifulSoup(html_doc)
titleName = soup.title.name

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X