Eu criei esse padrão que consegue encontrar diversas formatos de telefone, porém pode acabar validando algumas sequências numéricas incorretamente.
padrao = re.compile(r"(?:\+?\d{2,3}[ ]{0,4})?(?:(?:\(0?\d{2}\)|0?\d{2})[ ]{0,4})?(?:9[ .-]?)?\d{4}[ .-]?\d{4}")
fones = [
    "(092)9 4313-3030 ",
    "21 38323344",
    "+5535992321234",
    "155 8799232-3344",
    "013 9.7832-5588",
    "(45) 9 7832-9932",
    "055 032 99232 7711",
]Explicação:
- (?:): Não-captura de grupo, permite que o findall() seja usado sem retornar apenas os grupos.
- \+?: Prefixo de codigo internacional, escapado com a barra invertida, e considerado elemento opcional pelo- ?.
- \d{2,3}: Seleciona apenas 2 ou 3 digitos, equivalente à- [0-9].
- [ ]{0,4}: Separa DDI, e DDD com até 4 espaços. O número maioir pode ser apenas 2, caso o usuário tenha digitado dois espaços sem querer, ao invés de um.
- \(0?\d{2}\)|0?\d{2}: Encontra DDD nos formatos (12), (012) OU 12, 012, mas não 12).
- 9?[ .-]: Digito 9 pode ser seguido por um espaço, ponto ou hífen, eu não existir.
Se encontrar algum erro ou sabe de uma regra especial depois do 9 opcional, me avisem. :)
 
             
            