partie Extrait d'un match regex
-
19-09-2019 - |
Question
Je veux une expression régulière pour extraire le titre d'une page HTML. À l'heure actuelle, j'ai ceci:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Y at-il une expression régulière pour extraire uniquement le contenu de
La solution
Autres conseils
Essayez d'utiliser des groupes de capture:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Notez que le démarrage Python 3.8
, et l'introduction de (PEP 572) (opérateur :=
), il est possible d'améliorer un peu sur la solution Krzysztof Krason en capturant le résultat du match directement dans le cas état comme une variable et la réutilisation 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
re.search('<title>(.*)</title>', s, re.IGNORECASE).group(1)
Les pièces fournies de code ne pas faire face à Exceptions
Puis-je suggérer
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
retourne une chaîne vide par défaut si le modèle n'a pas été trouvé, ou le premier match.
Essayez:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Je vous recommande Beautiful Soup. La soupe est un très bon lib pour analyser l'ensemble de votre document html.
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
Je pense que cela devrait suffire:
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... en supposant que votre texte (HTML) est dans une variable nommée "texte".
Cela suppose aussi qu'il n'y a pas d'autres balises HTML qui peuvent être légalement intégrés à l'intérieur d'une balise HTML TITLE et aucun moyen d'intégrer légalement tout autre caractère Cependant ... Ne pas utiliser des expressions régulières pour l'analyse syntaxique HTML en Python. Utilisez un analyseur HTML! (À moins que vous allez écrire un analyseur complet, ce qui serait un travail supplémentaire si divers HTML, XML et SGML parseurs sont déjà dans les bibliothèques standard. Si votre traitement "monde réel" soupe balise HTML (qui est souvent non conforme à un validateur SGML / XML) puis utilisez la balise BeautifulSoup package. Il est pas dans les bibliothèques standard (encore) mais il est très recommandé à cet effet. Une autre option est: lxml ... qui est écrit pour bien structuré (normes conforme) HTML. Mais il a une option de repli à l'utilisation BeautifulSoup comme analyseur:. ElementSoup