1
resposta

Não entendi a função

Olhei as dúvidas de outros alunos e percebi que a maioria escreveu a função "procurar_regex" da seguinte maneira:

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

Queria entender porque nesta parte

    resultados = re.findall(regex, nomes_concatenados)

o "regex" dentro do re.findall não recebe nenhum modificador, como o "\w" ou "\d".

Tentei executar o código desta maneira e recebo o erro:

Traceback (most recent call last):
  File "app.py", line 80, in <module>
    menu()
  File "app.py", line 77, in menu
    procurar_regex(nomes)
  File "app.py", line 39, in procurar_regex
    resultados = re.findall(regex, nomes_concatenados)
NameError: global name 're' is not defined

O que está errado?

Código completo do app.py:

# -*- coding: UTF-8 -*-
def listar(nomes):
    print 'Listando nomes:'
    for nome in nomes:
        print nome

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

def remover(nomes):
    print 'Qual nome você gostaria de remover?'
    nome = raw_input()
    nomes.remove(nome)

def alterar(nomes):
    print 'Qual nome vc gostaria de alterar?'
    nome_a_alterar = raw_input()

    if (nome_a_alterar in nomes):
            posicao = nomes.index(nome_a_alterar)
        print 'Digite o substituto'
        nome_novo = raw_input()
        nomes[posicao] = nome_novo

def procurar(nomes):
    print 'Digite o nome a procurar:'
    nome = raw_input()
    if(nome in nomes):
        print "Nome %s está cadastrado" % (nome)
    else:
        print "Nome %s não está cadastrado" % (nome)

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


def menu():
    nomes = []
    escolha= ''
    while (escolha != '0'):
        print ' '
        print '=================='
        print '     MENU:'
        print '1 para cadastrar'
        print '2 para listar'
        print '3 para remover'
        print '4 para alterar'
        print '5 para procurar'
        print '6 para regex'
        print '0 para terminar'
        print '=================='
        print ' '
        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()
1 resposta

Oi Guilherme,

Sobre sua primeira dúvida, a regex na função será lida do teclado. Dessa forma, você pode escrever sua regex e todos seus modificadores quando rodar o programa.

Sobre o erro, faltou importar o módulo re. Basta incluir

import re

no começo do código.