Regex ignora la coincidencia si está contenida dentro de una cadena de 23 dígitos

Regex ignora la coincidencia si está contenida dentro de una cadena de 23 dígitos

Tengo problemas para encontrar una solución a una situación. Tengo esta expresión regular para que coincida con una secuencia de dígitos específica:

(102030)\d{10}

Usando esto como datos de prueba, obtengo las siguientes coincidencias:

75277887243040354513001
55345377243014107206375
810203087654135168       <- Match
1102030698798798477      <- Match
71020307248040361799581  <- Match

Lo que intento hacer es ignorar los casos en los que hay 23 dígitos en la cadena, ¿es posible usar solo expresiones regulares? Lo he intentado con una mirada negativa hacia el futuro pero no he podido lograrlo.

Respuesta1

Para mirar hacia adelante necesitas algo antes, así que comencemos con

\d

Luego por negativo delante de los siguientes 22 dígitos:

(?!\d{22})

filtramos todas las líneas con 23 dígitos. Entonces puede seguir tu cadena original.

(102030)\d{10}

Entonces la expresión regular completa será

\d(?!\d{22})(102030)\d{10}

Ver el resultado enregex101.com:

ingrese la descripción de la imagen aquí

Respuesta2

\b(?!\d{23}\b)\d*((102030)\d{10})\d*\b

Esto captura el partido en su primer subgrupo.

información relacionada