/ / Regex: Corresponder dígitos repetidos ignorando os não dígitos - .net, regex, número de telefone

Regex: Corresponder dígitos repetidos ignorando os não dígitos - .net, regex, número de telefone

Eu tenho uma lista de números de telefone desarrumados e alguns(provavelmente falso) contém o mesmo dígito repetido, mas também pode conter outros sinais de pontuação, espaços, letras, etc. Como posso identificar esses números com o .NET RegEx? Aqui está um exemplo:

00000000000000
(11)1111111111
22/ 222-2222222222
cell +33,333-3333-3333.
14 244-44444 Ext. 444

Eu preciso regex para coincidir com os primeiros 4, mas não o último que tem outros dígitos. Minhas ^(d)1+$ pega o primeiro número. Eu também tentei ^([.-[D]])1+$ para corresponder a um caractere repetitivo que não seja um não-dígito. Falhou. O mesmo para ^(d)(?:[1-[D]])+$. Uma maneira simples seria remover todos os não dígitos de uma só vez com D e, em seguida, use o primeiro regex, mas eu não quero criar 2 chamadas para um mecanismo de regex (estas são caras chamadas CLR de dentro do SQL Server).

A saída é um simples booleano 0-1 para cada linha. 0 quando não há correspondência e 1 quando há uma correspondência:

1
1
1
1
0

ATUALIZAR: Para estender esta questão um pouco. O que seria um regex de substituição se eu quiser apagar toda a linha, sempre que o regex tiver uma correspondência? Assim, a regex de substituição retornaria 4 linhas em branco e uma linha original. Eu estou tentando fazer isso com uma olhada, mas falhando.

Respostas:

2 para resposta № 1

Você pode usar

^D*(d)(?:D*1)+D*$

Veja o demo regex.

Detalhes

  • ^ - início da string
  • D* - 0 ou mais dígitos
  • (d) - Grupo 1: um dígito
  • (?:D*1)+ - 1 ou mais ocorrências consecutivas de
    • D* - 0 ou mais dígitos
    • 1 - o mesmo dígito capturado no Grupo 1
  • D* - 0 ou mais dígitos
  • $ - fim da string.