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 № 1Você pode usar
^D*(d)(?:D*1)+D*$
Veja o demo regex.
Detalhes
^
- início da stringD*
- 0 ou mais dígitos(d)
- Grupo 1: um dígito(?:D*1)+
- 1 ou mais ocorrências consecutivas deD*
- 0 ou mais dígitos1
- o mesmo dígito capturado no Grupo 1
D*
- 0 ou mais dígitos$
- fim da string.