2
respostas

Procurar um nome na lista usando regex

def procurar_regex(nomes):
    import re
    nomes_concatenados = ' '.join(nomes)
    print'Digite a funcao da expressao regular'
    funcao_regex = raw_input()
    print'Digite o padrao a ser encontrado'
    padrao_regex = raw_input()    
    resultado = funcao_regex(padrao_regex, nomes_concatenados)    
    print 'Resultado encontrado: %s' %(resultado)

Fiz esse código para aula 07 exercício 8 de Python2.

Recebi o erro:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

Entendi que o problema está em juntar uma função com uma string. Nessa linha resultado = funcao_regex(padrao_regex, nomes_concatenados)

Verifiquei que o tipo de resultado é tuple, então tentei diversas coisas. Uma delas foi:

 resultado = (padrao_regex, nomes_concatenados)
resultado_str = str(resultado)
resultado_final = funcao_regex(resultado_str)

porém sem sucesso.

Se eu quiser que o usuário digite a função e o padrão. Qual a forma de fazer? Como resolveria a mensagem do problema acima?

2 respostas

Oi Renata, tudo bom?

Pra entender direito o cenário que está dando erro, quais os valores que você está passando para funcao_regex e para padrao_regex?

O problema me parece estar em como você está chamando a função em questão.

Quando você chama o raw_input ele devolve uma str que não é um método... logo você não pode invocá-lo....

É o mesmo que escrever...

>>> funcao = "minha funcao"
>>> funcao("teste")

Para resolver isso, você pode acessar a função assim....

>>> funcao =  getattr(re, 'findall')
<function findall at 0x7fea92974f50>

E, essa será executável.

>>> funcao =  getattr(re, 'findall')
>>> funcao("[a-z]", "Michael Granados")
['i', 'c', 'h', 'a', 'e', 'l', 'r', 'a', 'n', 'a', 'd', 'o', 's']