Esto devolverá 4
como se esperaba:
Regex.Matches("020202020", @"0(?=20)").Count;
La anticipación coincide con20
sin consumiendo, por lo que el siguiente intento de coincidencia comienza en la posición siguiente al 0
.Incluso se puede hacer toda la expresión regular como una búsqueda hacia delante:
Regex.Matches("020202020", @"(?=020)").Count;
El motor de expresiones regulares choca de forma automática realiza un cambio de posición cada vez que se hace un partido de longitud cero. Por lo tanto, para encontrar todas las carreras de tres 2
's o cuatro 2
' s, puede utilizar:
Regex.Matches("22222222", @"(?=222)").Count; // 6
... y:
Regex.Matches("22222222", @"(?=2222)").Count; // 5
EDIT: Mirando por encima de su pregunta de nuevo, se me ocurre que podría estar buscando 2
's intercalados con 0
' s
Regex.Matches("020202020", @"(?=20202)").Count; // 2
Si usted no sabe cuántos 0
's habrá, puede utilizar esto:
Regex.Matches("020202020", @"(?=20*20*2)").Count; // 2
Y, por supuesto, se pueden utilizar cuantificadores para reducir la repetición en la expresión regular:
Regex.Matches("020202020", @"(?=2(?:0*2){2})").Count; // 2
su pregunta es engañoso. ¿Quieres unir '2'-s consecutivas o secuencias arbitrarias? – krlmlr