Olá Vitor, tudo bem com você?
Será necessário sim informar que a string pode conter espaço vazio, uma das formas que podemos fazer isso é colocarmos um espaço vazio entre os colchetes, o padrão que você criou, basta adicionar os espaços, ficando como abaixo.
padrao = re.compile("[+]?[0123456789]{2}?[ ]?[0123456789]{2}?[ ]?[0123456789]{5}[-]?[0123456789]{4}")
Note que foi adicionado um espaço no terceiro e sétimo conjunto de colchetes ([ ]) contando da esquerda para a direita.
Uma segunda forma que podemos informar que a busca com padrões em strings que podem ou não conter um espaço, será fazendo o uso do caractere especial \s
, s minúsculo.
- \s = Retorna match se encontrado espaço se a string contém espaço em branco.
padrao = re.compile("[+]?[0123456789]{2}?[\s]?[0123456789]{2}?[\s]?[0123456789]{5}[-]?[0123456789]{4}")
Esse segundo método ficará mais explícito que está buscando por um espaço vazio.
Teste do padrão
import re
telefone_um = "+55 21 99998-7654"
telefone_dois = "+552199998-7654"
padrao = re.compile("[+]?[0123456789]{2}?[\s]?[0123456789]{2}?[\s]?[0123456789]{5}[-]?[0123456789]{4}")
busca_com_espaco = padrao.search(telefone_um)
sem_espaco = padrao.search(telefone_dois)
print(busca_com_espaco.group())
print(sem_espaco.group())
`
Resultado
+55 21 99998-7654
+552199998-7654
Para aprimorar ainda mais o seu aprendizado, recomendo a leitura do seguinte artigo, onde será apresentado com detalhes sobre outros caracteres especiais utilizados RegEx.
O artigo acima está em inglês, caso tenha dificuldade com o idioma, recomendo o uso do tradutor do navegador.
Fico à disposição em caso de dúvidas.
Abraços e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!