As soluções acima são superiores, especialmente se estiver usando Java e encontrando mais números com mais de 10 dígitos, como prefixo de código internacional ou números de ramais adicionais. Esta solução é básica (sou um iniciante no mundo regex) e foi projetada com números de telefone dos EUA em mente e só é útil para strings com apenas 10 números com talvez alguns caracteres de formatação, ou talvez nenhum caractere de formatação (apenas 10 números ) Como tal, recomendo esta solução apenas para aplicações semi-automáticas. Pessoalmente, prefiro armazenar números como apenas 10 números sem formatar caracteres, mas também quero ser capaz de converter ou limpar números de telefone para o formato padrão que as pessoas normais e os aplicativos / telefones reconhecerão instantaneamente à vontade.
Encontrei este post procurando por algo que eu pudesse usar com um aplicativo de limpeza de texto que tenha recursos PCRE Regex (mas sem funções java). Vou postar isso aqui para pessoas que poderiam usar uma solução Regex pura e simples que poderia funcionar em uma variedade de editores de texto, limpadores, expansores ou mesmo alguns gerenciadores de área de transferência. Eu pessoalmente uso Sublime e TextSoap. Esta solução foi feita para Text Soap, uma vez que está na barra de menus e fornece um menu suspenso onde você pode acionar ações de manipulação de texto no que é selecionado pelo cursor ou no que está na área de transferência.
Minha abordagem consiste essencialmente em substituir / pesquisar e substituir regexes. Cada pesquisa de substituição e substituição envolve duas regexes, uma para pesquisa e outra para substituição.
Substituição / Pesquisa e Substituição # 1
- A primeira substituição / pesquisa e substituição remove os números não numéricos de um número de 10 dígitos para uma sequência de 10 dígitos.
Primeira substituição / pesquisa Regex:\D
- Esta string de pesquisa corresponde a todos os caracteres que não sejam um dígito.
Primeira substituição / substituir Regex: "" (nada, nem mesmo um espaço)
- Deixe o campo substituto completamente em branco, nenhum espaço em branco deve existir, incluindo espaços. Isso resultará na exclusão de todos os caracteres não-dígitos correspondentes. Você deve ter entrado com 10 dígitos + caracteres de formatação antes desta operação e sair com 10 dígitos sem caracteres de formatação.
Substituição / Pesquisa e Substituição # 2
- A segunda substituição / procura e parte de procura de substituição da operação captura grupos para código de área
$1, um grupo de captura para o segundo conjunto de três números $2e o último grupo de captura para o último conjunto de quatro números $3. A regex para a parte substituta da operação insere a formatação de número de telefone dos EUA entre o grupo de dígitos capturados.
Segunda Substituição / Pesquisa Regex:(\d{3})(\d{3})(\d{4})
Segunda Substituição / Substituir Regex:\($1\) $2\-$3
A barra invertida \escapa os caracteres especiais (, ), (<-whitespace), e -uma vez que estamos inserindo-os entre os nossos números capturados em grupos de captura $1, $2, e $3para fins do número de telefone de formatação.
No TextSoap, criei um limpador personalizado que inclui as duas ações da operação de substituição, portanto, na prática, parece idêntico à execução de um script. Tenho certeza de que essa solução poderia ser melhorada, mas espero que a complexidade aumente um pouco. Uma versão aprimorada desta solução é bem-vinda como uma experiência de aprendizado, se alguém quiser adicionar a isso.