python Estrai parte di una corrispondenza regex




html html-content-extraction (7)

Penso che questo dovrebbe essere sufficiente:

#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)

... assumendo che il testo (HTML) si trovi in ​​una variabile denominata "testo".

Ciò presuppone anche che non ci siano altri tag HTML che possono essere legalmente incorporati all'interno di un tag HTML TITLE e non c'è modo di incorporare legalmente qualsiasi altro <carattere all'interno di tale contenitore / blocco.

Tuttavia ...

Non utilizzare espressioni regolari per l'analisi HTML in Python. Usa un parser HTML! (A meno che non si scriva un parser completo, che sarebbe un lavoro extra quando vari parser HTML, SGML e XML sono già presenti nelle librerie standard.

Se gestisci il codice HTML " zuppa " di tag "mondo reale" (che è spesso non conforme a qualsiasi validatore SGML / XML), utilizza il pacchetto BeautifulSoup . Non è nelle librerie standard (ancora) ma è largamente raccomandato per questo scopo.

Un'altra opzione è: lxml ... che è scritto per HTML adeguatamente strutturato (standard conforme). Ma ha la possibilità di ricorrere all'utilizzo di BeautifulSoup come parser: ElementSoup .

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>', '') 

Esiste un'espressione regolare per estrarre solo il contenuto di <title> quindi non devo rimuovere i tag?


Usa ( ) in regexp e group(1) in python per recuperare la stringa catturata ( re.search restituirà None se non trova il risultato, quindi non utilizzare group() direttamente ):

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

if title_search:
    title = title_search.group(1)

Provare:

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

Posso raccomandarti una bella zuppa. Soup è un ottimo lib per analizzare tutto il tuo documento html.

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

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


Per favore, NON usare regex per analizzare i linguaggi di markup. Usa lxml o beautifulsoup.


Prova a utilizzare i gruppi di acquisizione:

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




html-content-extraction