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

Dúvida no Ex. 6 da Aula 7 - Expressão regulares

Boa Noite Na minha pesquisa com o regex ela so traz a parte do nome que pesquisei: Ex: minha Lista ('junior lais), quando pesquiso so traz o trecho que digitei

--------------
==========================================================
= Digite 1 para cadastrar , 3 para excluir,2 para Listar =
= 4 para Alterar e 5 para pesquisar ou 0 para sair.      =
==========================================================
2
['junior', 'lais']
==========================================================
= Digite 1 para cadastrar , 3 para excluir,2 para Listar =
= 4 para Alterar e 5 para pesquisar ou 0 para sair.      =
==========================================================
6
Localizar : la
['la']
==========================================================
= Digite 1 para cadastrar , 3 para excluir,2 para Listar =
= 4 para Alterar e 5 para pesquisar ou 0 para sair.      =
==========================================================

Nao teria uma form ate trazer a palavra toda , tente 0 \w+ mas deu erro , como ficaria neste caso ?

Meu código

import re

def listar(nomes):
        print (nomes)

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

def remove(nomes):
    nome = raw_input('Digite o nome a ser excluido:')
    nomes.remove(nome)

def alterar(nomes):
    nome = raw_input('Digite o nome a ser alterado: ')
    novo = ''
    if nome in nomes:
        pos = nomes.index(nome)
        novo = raw_input('Novo Nome :')
        nomes[pos] = novo
    else:
        print('Nome nao encontado')

def localiza(nomes):
    nome = raw_input('Nome a ser pesquisado:')
    if nome in nomes:
        pos = nomes.index(nome)
        print('O nome %s foi encontado na posicao %s ' % (nome,pos))
    else:
        print('O nome %s nao foi encontado na lista' % nome)

def localiza_novo(nomes):
    nome = raw_input('Localizar : ')
    nova = ''.join (nomes)
    encontrado = re.findall(nome, nova)
    print(encontrado)


def menu():
    nomes = []
    escolha = ''
    while (escolha != '0'):
        print ('==========================================================')
        print ('= Digite 1 para cadastrar , 3 para excluir,2 para Listar =')
        print ('= 4 para Alterar e 5 para pesquisar ou 0 para sair.      =')
        print ('==========================================================')
        escolha = raw_input()

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

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

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

        if (escolha == '4'):
            alterar(nomes)
        if (escolha == '5'):
            localiza(nomes)
        if (escolha == '6'):
            localiza_novo(nomes)
5 respostas

Olá, lembrando que, de acordo com seu código, se a opção for '6' sera chamado 'localiza_novo', que por sua vez executa 'encontrado = re.findall(nome, nova)'

nome seria a regex, nesse caso, tente passar 'l\w+' para buscar as palavras com 'l', ou ainda 'la\w+' para buscar as palavras com 'la'.

Espero ter ajudado.

Bom Dia

Cesar mas da maneira que vc esta dizendo vou chumbar o valore ignorar o valor passado. Como seria no código isso pra pegar o valor passado ?

Eu tentei assim ams ocorre um erro:

def localiza_novo(nomes):
    nome = raw_input('Localizar : ')
    nova = ''.join (nomes)
    encontrado = re.findall('%s\w+', nova) %nome
    print(encontrado)

Ja tentei assim também

def localiza_novo(nomes):
    nome = raw_input('Localizar : ')
    nova = ''.join (nomes)
    encontrado = re.findall(nome'w+', nova) %nome
    print(encontrado)

Nao sei qual outra forma e fazer isso, no ajuda do exercício so passa da maneira que nao mostra toda a palavra também.

Valeu pelo apoio ..

solução!

Ataide, você pode misturar um loop for com as expressões regulares pra fazer isso. Já falo disso, mas vamos entender porque não deu certo e não vai dar no contexto desse exercício.

Suponhamos que cadastrei três nomes - Ataide, Yan e Joao. Temos, então, que nomes = ['Ataide', 'Yan', 'Joao'], certo? Na função localiza_novo nós não trabalhamos com essa lista, a gente junta tudo em uma string:

nova = ''.join(nomes)

Se imprimirmos a variável nova temos:

AtaideYanJoao

O método join deixa tudo em uma só string. Se procurarmos por aide, como o interpretador vai saber se é pra trazer Ataide ou AtaideYanJoao, entende?

Mas, como eu disse no começo, você consegue fazer da maneira que está pensando com um loop for:

def localiza_novo(nomes):
    nome_procurado = raw_input()
    for nome in nomes:
        if re.findall(nome_procurado, nome):
            print nome
            break

Boa Tarde Entendi perfeitamente agora Yan, obrigado cara realmente não estava pensando dessa forma ... mas muito Obrigado. Deu certo utilizando um foreach. Abraço.

Ataide, marque sua dúvida como solucionada para outros alunos com dúvidas similares virem se conseguem resolver seus problemas com esse tópico!

Bons estudos, abraços!