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

Duvida na aula 7 - Resposta vazia

Boa noite, no exercício procurar nomes com regex eu só obtenho como resposta uma lista vazia [] Na minha regex eu coloco r'([lL]\w+)' e meus nomes cadastrados sao: Lucas, Leo e Marcos. Por favor alguem consegue identificar o erro?

segue o código:

def procurar_regex (nomes):
    print('Digite a expressao regular')
    regex = raw_input()
    nomes_concatenados = ''.join(nomes)
    resultados = re.findall(regex, nomes_concatenados)
    print(resultados)

e o codigo completo:

# -*- coding:UTF-8 -*-
import re

def cadastrar(nomes):
    print 'Digite o nome a adicionar:'
    nome = raw_input()
    nomes.append(nome)

def listar(nomes):
    print 'Listando nomes:'
    for nome in nomes:
        print nome

def remover(nomes):
    print 'Qual nome remover?'
    nome = raw_input()
    nomes.remove(nome)

def alterar(nomes):
    print 'Qual nome alterar?'
    nome_alterar = raw_input()
    if (nome_alterar in nomes):
        posicao = nomes.index(nome_alterar)
        print 'Digite o novo nome:'
        nome_alterado = raw_input()
        nomes[posicao] = nome_alterado

def procurar(nomes):
        print 'Digite nome a procurar:'
        nome_a_procurar = raw_input()
        if (nome_a_procurar in nomes):
            print 'Nome listado'
        else:
            print '%s nao esta na lista' % (nome_a_procurar)

def procurar_regex (nomes):
    print('Digite a expressao regular:')
    regex = raw_input()
    nomes_concatenados = ''.join(nomes)
    resultados = re.findall(regex, nomes_concatenados)
    print(resultados)


 def menu():
    nomes=[]
    escolha=''
    while (escolha!='0'):
        print 'Digite 1 para cadastrar, 2 para listar, 3 para remover, 4 para alterar, 0 para sair, 5 para procurar, 6 para procurar regex.'
        escolha = raw_input()


        if(escolha == '1'):
            cadastrar(nomes)

        if(escolha == '2'):
            listar(nomes)

        if(escolha == '3'):
            remover(nomes)

        if(escolha =='4'):
            alterar(nomes)

        if(escolha =='5'):
            procurar(nomes)

        if(escolha =='6'):
            procurar_regex(nomes)

menu()
3 respostas
solução!

Oi Lucas, vamos lá.

O primeiro problema é que você esta escrevendo sua expressão regular usando raw string dessa maneira: r'([lL]\w+)'. Em teoria esta correto, mas o problema é que você já lê do teclado usando a função raw_input. Ela já se encarrega de colocar o que você digitou como um raw string.

Com essa pequena alteração, seu código vai funcionar, mas atenção, é necessário mais uma alteração. Veja que concatenamos todos os nomes da lista através da função .join(''). Todos os nomes serão concatenados sem espaços entre eles e ficará assim: LucasLeoMarcos. Dessa forma, sua expressão regular encontrará a string toda.

Para ficar do jeito que você espera, altere a função .join('') para ,join(' '). Veja que adicionamos um espaço como separador, daí sua string ficará Lucas Leo Marcos e a expressão regular entrada encontrará perfeitamente.

Sucesso e bom estudo!

Obrigado professor deu certo, mas eu também tive que colocar a regex sem as aspas ''

ficou assim:

([lL]zw+)

([lL]\w+)

correção