Existe um sabor regex que me permite contar o número de repetições correspondidas pelos operadores * e +?

StackOverflow https://stackoverflow.com/questions/3029127

Pergunta

Existe um sabor regex que me permite contar o número de repetições correspondentes pelo * e + operadores? Eu gostaria especificamente de saber se é possível na plataforma .NET.

Foi útil?

Solução

Você tem a sorte porque, na verdade, o .Net Regex faz isso (o que eu acho único). Essencialmente em todo Match, cada Group armazena todos Captures isso foi feito.

Então você pode contar quantas vezes um padrão repetível correspondeu a uma entrada por:

  • Tornando -o um grupo de captura
  • Contando quantas capturas foram feitas por esse grupo em cada partida
    • Você também pode iterar através da captura individual, se quiser!

Aqui está um exemplo:

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);
}

Isso impressa (Como visto em ideone.com):

hahahaha 4
huahuahua 3
huahahahuaha 5

Referências da API

Outras dicas

Você pode usar parênteses na expressão para criar um grupo e depois usar o + ou * operador no grupo. o Captures propriedade do Group pode ser usado para determinar quantas vezes foi correspondido. O exemplo a seguir conta o número de letras consecutivas em caso inferior no início de uma string:

var regex = new Regex(@"^([a-z])+");
var match = regex.Match("abc def");

if (match.Success)
{
    Console.WriteLine(match.Groups[1].Captures.Count);
}

Que tal tomar "pref ([a-z]+) suff"

Em seguida, use grupos para capturar que [AZ]+ no suporte e encontre seu comprimento?

Você também pode usar esse comprimento para a correspondência subsequente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top