Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

retorno do re.findall

Olá, na aula é mostrado que 're.findall()' retorna um 'list', contudo não consigo usa-lo como tal e nem atribuir um valor para um 'list'. O que estou fazendo de errado?

import re

frase = 'codigo=1234&codigo=1234'
piada = 'o que 15426325 é '

padrao = '[=][0-9]{1,4}'

lista = [frase, piada]

for i in lista:
    retorno = re.findall(padrao, i)
    print(retorno[0])
3 respostas

Olá Marcio,

O seu código está correto, mas acontece um erro ao executar o código porque o padrão não é encontrado dentro de piada e então o findall retorna uma lista vazia [], e como a lista está vazia você não pode acessar o primeiro elemento em retorno[0] porque não existe nenhum elemento.

Você pode fazer o teste deixando a última linha assim: print(retorno) então você vai ver que o retorno do findall para 'o que 15426325 é ' é uma lista vazia já que o padrão não foi encontrado.

Exemplo:

import re

frase = 'codigo=1234&codigo=1234'
piada = 'o que 15426325 é '

padrao = '[=][0-9]{1,4}'

lista = [frase, piada]

for i in lista:
    retorno = re.findall(padrao, i)
    print(retorno)

Resultado:

['=1234', '=1234']
[]

Espero ter ajudado, qualquer dúvida é só falar.

Olá Lucas, agradeço a resposta, e desculpe a "noobada", depois da sua resposta percebi que simplesmente não rolei a barra do terminal do pycharm, então o primeiro for em 'frase' funcionava perfeitamente, e, lógico, falhava em 'piada'. Foi só depois da sua resposta que percebi que o erro que aparecia era relacionado a segunda rodada do 'for' e não a primeira (que vergonha Meu Deus... ;) )Mais uma vez obrigado.

solução!

Sem problemas Marcio, é muito comum a gente deixar esses detalhes passarem na programação, são sempre muitas regras e detalhes (da linguagem e da lógica) a serem considerados em cada código.

Qualquer dúvida é só falar!