parte extrato de um jogo de regex
-
19-09-2019 - |
Pergunta
Eu quero uma expressão regular para extrair o título de uma página HTML. Atualmente eu tenho este:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Existe uma expressão regular para extrair apenas o conteúdo de
Outras dicas
Tente usar a captura de grupo:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Note que a partir Python 3.8
, ea introdução de expressões de atribuição (PEP 572) (operador :=
), é possível melhorar um pouco da Krzysztof Krason solução capturando o resultado da partida diretamente no caso condição como uma variável e re uso-lo no corpo da condição:
# 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)
As peças fornecidas de código não lidar com Exceptions
Posso sugerir
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
Este retorna uma string vazia por padrão, se o padrão não foi encontrado, ou o primeiro jogo.
Tente:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
Maio eu recomendo que você Beautiful Soup. Sopa é um bom lib para analisar todo o seu documento HTML.
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
Eu acho que isso deve ser suficiente:
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... assumindo que o seu texto (HTML) está em uma variável chamada "texto."
Isso também pressupõe que não há outras tags HTML que pode ser legalmente incorporado dentro de uma tag HTML TITLE e não há maneira de legalmente incorporar qualquer outro caractere No entanto ... Não use expressões regulares para HTML parsing em Python. Use um analisador de HTML! (A menos que você está indo para escrever um parser completo, o que seria um trabalho extra quando vários HTML, SGML e XML parsers já estão nas bibliotecas padrão. Se o seu manuseio "mundo real" tag sopa HTML (que é freqüentemente não-conforme a qualquer validador SGML / XML), em seguida, usar o pacote BeautifulSoup . Não é nas bibliotecas padrão (ainda), mas é grande recomendado para esta finalidade. Outra opção é: lxml ... o que é escrito para devidamente estruturado (normas conformant) HTML. Mas tem uma opção para fallback para usar BeautifulSoup como um analisador:. ElementSoup