249 Stimmen

Teil einer Regex-Übereinstimmung extrahieren

Ich möchte einen regulären Ausdruck, um den Titel aus einer HTML-Seite zu extrahieren. Derzeit habe ich dies:

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

Gibt es einen regulären Ausdruck, der nur den Inhalt von <title> extrahiert, so dass ich die Tags nicht entfernen muss?

10 Stimmen

Wow, ich kann nicht glauben, dass all die Antworten dazu auffordern, die gesamte HTML-Seite zu analysieren, nur um einen einfachen Titel zu extrahieren. Was für ein Overkill!

5 Stimmen

Der Titel der Frage sagt alles - das angegebene Beispiel geschieht HTML zu sein, aber das allgemeine Problem ist ... allgemein.

381voto

Krzysztof Krasoń Punkte 24965

Verwenden Sie ( ) in regexp und group(1) in Python, um die erfasste Zeichenkette abzurufen ( re.search wird zurückgegeben None wenn es das Ergebnis nicht findet, also verwenden Sie nicht group() direkt ):

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

if title_search:
    title = title_search.group(1)

69voto

Xavier Guihot Punkte 42435

Beachten Sie, dass ab Python 3.8 und die Einführung von Zuweisungsausdrücke (PEP 572) ( := Operator), ist es möglich, ein wenig zu verbessern auf Die Lösung von Krzysztof Krason indem Sie das Ergebnis der Übereinstimmung direkt in der if-Bedingung als Variable erfassen und im Körper der Bedingung wiederverwenden:

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

12voto

Aaron Maenpaa Punkte 112919

Versuchen Sie es mit Erfassungsgruppen:

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

10voto

kharagpur Punkte 221

Darf ich Ihnen Beautiful Soup empfehlen? Soup ist eine sehr gute Lib, um Ihr gesamtes HTML-Dokument zu analysieren.

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

7voto

Randy Punkte 3912

Versuchen Sie es:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X