• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zeitler

Expressões regulares

2 mensagens neste tópico

Boas!

Sou novo em python e estou com um problema com expressões regulares.

Tenho um ficheiro HTML que leio para uma variável. Depois pretendo analisá-lo de forma a encontrar determinados blocos de texto. Acontece que quando a expressão a procurar engloba mais do que uma linha é retornado None.

Parte do conteúdo do HTML é o seguinte:

...

<B>AAA</B><BR></DIV>                                                     

 <BR>                                                                             

<B>BBB</B><BR>                                                         

<B>CCC</B><BR>

...

O que eu  pretendo encontrar é o que está a vermelho (AAA, BBB, CCC). O que está a verde e azul é para efeitos de teste.

O script é o seguinte:

def read_file(file):
    f = open (file, 'r')
    content = f.read()
    f.close()
    return content

def find_pattern(pattern, content):
    new_pattern = re.compile(pattern, re.U | re.M)
    results = re.findall(new_pattern, content)
    return results

def show _results(results):
    print results

Utilzando a pattern para encontrar o que está a vermelho retorna None, utilizando uma pattern para encontar o que está a verde retorna None, utilizando uma pattern para encontrar o que está a azul retorna vários resultados.

A pattern utilizada para encontrar o verde é:  pattern = '<BR><B>'; devolve [ ]

para encontar o azul é: pattern = '<BR>'; devolve ['<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>', '<BR>']

A expressão que utilizo para encontrar o que está a vermelho está correcta pois já exprimentei colocar o código em apenas uma linha e funciona. O problema é mesmo no caso de multilinha.

Alguém consegue dar uma ajudazita?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para procurares em várias linhas tens que fazer isto:

re.compile('expressãoregular', re.M)

O re.M é multi-line search.

Para o teu problema, se só queres encontrar o que está a vermelho, diria que precisas de algo tipo:

regex = '<b>(.*)</b><br />'

Trocas o .* por algo mais específico se for o caso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora