Extrakt Teil einer Regex
-
19-09-2019 - |
Frage
Ich möchte ein regulärer Ausdruck, den Titel von einer HTML-Seite zu extrahieren. Zur Zeit habe ich diese:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Sie haben einen regulären Ausdruck nur den Inhalt von
Lösung
Andere Tipps
Versuchen Sie erfassen Gruppen mit:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Beachten Sie, dass ausgehend Python 3.8
, und die Einführung von Zuweisungsausdrücke (PEP 572) (:=
Operator), dann ist es möglich, ein bisschen auf Krzysztof Krason Lösung zu verbessern, indem das Spielergebnis direkt in der, wenn die Erfassung Zustand als Variable und wiederverwenden es im Körper der Bedingung:
# 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)
Die zur Verfügung gestellten Teile des Codes tun bewältigen nicht mit Exceptions
Darf ich vorschlagen,
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
Das gibt eine leere Zeichenfolge standardmäßig, wenn das Muster gefunden wird nicht, oder das erste Spiel.
Versuchen Sie:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Mai empfehle ich Ihnen schöne Suppe. Suppe ist eine sehr gute lib alle Ihre HTML-Dokument zu analysieren.
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
Ich würde denken, sollte dies genügen:
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... vorausgesetzt, dass Ihr Text (HTML) in einer Variablen namens "Text."
Dies geht auch davon aus, dass es nicht andere HTML-Tags, die legal innerhalb eines HTML-Titel-Tag eingebettet werden kann und keine Möglichkeit einbetten, um legal andere Zeichen Doch ... Verwenden Sie keine regulären Ausdrücke für HTML-Analyse in Python. Verwenden Sie einen HTML-Parser! (Es sei denn, Sie gehen einen vollständigen Parser zu schreiben, die eine zusätzliche Arbeit sein würde, wenn verschiedene HTML, SGML und XML-Parser bereits in den Standardbibliotheken sind. Wenn Ihr Umgang mit der "realen Welt" Tag Suppe HTML (die in jedem SGML / XML-Validator häufig nicht konforme), dann verwenden Sie die BeautifulSoup Paket. Es ist nicht in den Standardbibliotheken (noch) nicht, aber sie ist breit für diesen Zweck empfohlen. Eine weitere Option ist: lxml ..., die für richtig strukturiert (Standards konform) geschrieben HTML. Aber es hat eine Option zur Verwendung von BeautifulSoup als Parser Rückfall. ElementSoup