1
resposta

A função re.search() não retorna uma string

Eu fiz esse código igual ao do professor:

import re

email_1 = "Meu número é 1234-1234"
email_2 = "Fale comigo em 1234-1234, esse é meu telefone"
email_3 = "1234-1234 é o meu celular"

padrao = "[0-9] [0-9] [0-9] [0-9] [-] [0-9] [0-9] [0-9] [0-9]"

retorno = re.search(padrao, email_1)
print(retorno)

só que no final, ao invés de retornar "1234-1234" igual deveria, só apareceu escrito "None" na tela. Eu dei uma olhada em tudo o que eu fiz, mas não encontrei nenhum erro que eu saiba e quando eu testei, a variável retorno não funcionou.

Edit: Resolvi o problema. A variável que eu chamei de "padrao" aparentemente não pode receber espaços entre os colchetes, então ficou assim:

padrao = "[0-9][0-9][0-9][0-9][-][0-9][0-9][0-9][0-9]"
1 resposta

Oii Jéssica, como você está?

O problema era exatamente esse que você colocou no edit.

Uma regex tem que ter o padrão exatamente como está definido na string, se o que queremos capturar possui espaço, temos que colocar espaço. Caso não possua espaços, não colocamos. Veja que caso o número de celular possuísse espaço o seu primeiro código funcionaria, observe a variável modificada email_1:

import re

email_1 = "Meu número é 1 2 3 4 - 1 2 3 4"
email_2 = "Fale comigo em 1234-1234, esse é meu telefone"
email_3 = "1234-1234 é o meu celular"

padrao = "[0-9] [0-9] [0-9] [0-9] [-] [0-9] [0-9] [0-9] [0-9]"

retorno = re.search(padrao, email_1)
print(retorno)

Resultado:

<re.Match object; span=(13, 30), match='1 2 3 4 - 1 2 3 4'>

Porém, como a variável e_mail1 não possui espaços, não devemos colocá-lo no padrão. Tudo bem?!

Qualquer dúvida estou por aqui, tá bom?

Abraços e bons estudos!