C'è un sapore regex che mi permette di contare il numero di ripetizioni corrispondenti da parte del * e + operatori?

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

Domanda

C'è un sapore regex che mi permette di contare il numero di ripetizioni corrispondenti da parte degli operatori e * +? Avevo specificamente piacerebbe sapere se è possibile sotto la piattaforma .NET.

È stato utile?

Soluzione

Sei fortunato perché in realtà .NET regex fa questo (che credo sia abbastanza unico). In sostanza in ogni Match, ciascuno negozi Group ogni Captures che è stato fatto.

Così si può contare quante volte un modello ripetibile abbinato un ingresso da:

  • Fare un gruppo di cattura
  • contare quante acquisizioni sono state fatte da quel gruppo in ogni partita
    • È possibile scorrere la cattura individuale anche se volete!

Ecco un esempio:

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

Questo stampa ( come visto in ideone.com ):

hahahaha 4
huahuahua 3
huahahahuaha 5

riferimenti API

Altri suggerimenti

È possibile utilizzare parentesi nell'espressione di creare un gruppo e quindi utilizzare il + o * dell'operatore sul gruppo. Il Captures proprietà del < a href = "http://msdn.microsoft.com/en-us/library/bxdt1k3b.aspx" rel = "nofollow noreferrer"> Group può essere utilizzato per determinare quante volte è stato abbinato. Il seguente esempio conta il numero di lettere minuscole consecutivi all'inizio di una stringa:

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

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

come circa la presa "pref ([a-z]+) suff"

quindi utilizzare i gruppi per la cattura che [a-z] + nel supporto e trovare la sua lunghezza?

È possibile utilizzare questa lunghezza per la successiva corrispondenza pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top