/ / Regex: empareja los dígitos repetidos que ignoran los no dígitos - .net, regex, número de teléfono

Regex: coincide con los dígitos que se repiten ignorando los dígitos que no son dígitos - .net, regex, número de teléfono

Tengo una lista de números de teléfono desordenados y algunos(probablemente falso) contiene el mismo dígito que se repite en todas partes, pero también puede contener otros signos de puntuación, espacios, letras, etc. ¿Cómo puedo identificar dichos números con .NET RegEx? Aquí hay un ejemplo:

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

Necesito la expresión regular para hacer coincidir los primeros 4, pero no el último que tiene otros dígitos. Mi ^(d)1+$ Atrapa el primer número. Yo tambien lo intenté ^([.-[D]])1+$ para que coincida con un carácter de repetición que no es un dígito no. Ha fallado. Igual por ^(d)(?:[1-[D]])+$. Una forma sencilla sería eliminar todos los no dígitos en una sola pasada con D y luego uso la primera expresión regular, pero no quiero crear 2 llamadas a un motor de expresiones regulares (estas son llamadas CLR caras desde SQL Server).

La salida es un simple booleano 0-1 para cada línea. 0 cuando no hay coincidencia y 1 cuando hay una coincidencia:

1
1
1
1
0

ACTUALIZAR: Para ampliar esta pregunta un poco. ¿Qué sería una expresión regular de reemplazo si deseo borrar toda la línea, siempre que la expresión regular tenga una coincidencia? Por lo tanto, la expresión regular de reemplazo devolvería 4 líneas en blanco y una línea original. Estoy tratando de hacer esto con un lookaround, pero fallando.

Respuestas

2 para la respuesta № 1

Puedes utilizar

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

Ver el demo regex.

Detalles

  • ^ - comienzo de cuerda
  • D* - 0+ no dígitos
  • (d) - Grupo 1: un dígito
  • (?:D*1)+ - 1 o más ocurrencias consecutivas de
    • D* - 0+ no dígitos
    • 1 - el mismo dígito capturado en el Grupo 1
  • D* - 0+ no dígitos
  • $ - Fin de la cuerda.