Estratto parte di una partita regex
-
19-09-2019 - |
Domanda
Voglio un'espressione regolare per estrarre il titolo da una pagina HTML. Attualmente ho questo:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
C'è un'espressione regolare per estrarre solo il contenuto di
Altri suggerimenti
Provare a utilizzare gruppi di cattura:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Si noti che a partire Python 3.8
, e l'introduzione di (PEP 572) (operatore :=
), è possibile migliorare un po 'la soluzione di Krzysztof Krason catturando il risultato della partita direttamente all'interno del caso condizione come variabile e riutilizzarlo nel corpo della condizione:
# 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)
I pezzi forniti di codice non affrontare Exceptions
Posso suggerire
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
Questo restituisce una stringa vuota per impostazione predefinita se non è stato trovato il modello, o la prima partita.
Prova:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Posso raccomandare a Beautiful Soup. Zuppa è un ottimo lib per analizzare tutto il vostro documento HTML.
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
Mi piacerebbe che questo dovrebbe essere sufficiente:
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... supponendo che il testo (HTML) è in una variabile denominata "testo".
Questo presuppone anche che non ci sono altri tag HTML che possono essere legalmente incorporato all'interno di un tag HTML TITLE e non c'è modo per incorporare legalmente ogni altra Tuttavia ... Non usare le espressioni regolari per l'analisi HTML in Python. Utilizzare un parser HTML! (A meno che non hai intenzione di scrivere un parser completo, che sarebbe un lavoro extra quando vari HTML, SGML e XML parser sono già nelle librerie standard. Se la movimentazione "mondo reale" tag zuppa HTML (che spesso non conformi a qualsiasi validatore SGML / XML) quindi utilizzare il BeautifulSoup pacchetto. Non è nelle librerie standard (ancora), ma è larga consigliato per questo scopo. Un'altra opzione è: lxml ... che è scritto adeguatamente strutturati (standard conforme) HTML. Ma ha la possibilità di fallback per utilizzare BeautifulSoup come un parser:. ElementSoup