¿Hay un sabor regex que me permita contar el número de repeticiones que coinciden con los operadores * y +?

¿Hay un sabor regex que me permita contar el número de repeticiones que coinciden con los operadores * y + ? Me gustaría saber específicamente si es posible en la plataforma .NET.

Eres afortunado porque, de hecho, .NET regex hace esto (que creo que es bastante único). Esencialmente en cada Match , cada Group almacena cada Captures que se hizo.

Entonces puedes contar cuántas veces un patrón repetible coincide con una entrada de la siguiente manera:

  • Lo que lo convierte en un grupo de captura
  • Contando cuántas capturas realizó ese grupo en cada partida
    • ¡También puede repetir la captura individual si lo desea!

Aquí hay un ejemplo:

 Regex r = new Regex(@"\b(hu?a)+\b"); var text = "hahahaha that's funny but not huahuahua more like huahahahuaha"; foreach (Match m in r.Matches(text)) { Console.WriteLine(m + " " + m.Groups[1].Captures.Count); } 

Esto imprime ( como se ve en ideone.com ):

 hahahaha 4 huahuahua 3 huahahahuaha 5 

Referencias de API

  • CaptureCollection

Puede usar paréntesis en la expresión para crear un grupo y luego usar el operador + o * en el grupo. La propiedad Captures del Group se puede usar para determinar cuántas veces se combinó. El siguiente ejemplo cuenta el número de letras minúsculas consecutivas al comienzo de una cadena:

 var regex = new Regex(@"^([az])+"); var match = regex.Match("abc def"); if (match.Success) { Console.WriteLine(match.Groups[1].Captures.Count); } 

¿ "pref ([az]+) suff" hay de tomar "pref ([az]+) suff"

luego usa grupos para capturar ese [az] + en el corchete y encontrar su longitud?

También puede usar esta longitud para la coincidencia posterior.