Gibt es einen regex Geschmack, der mir die Anzahl der Wiederholungen durch die * und + Betreiber abgestimmt zählen können?

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

Frage

Sie haben einen regex Geschmack, der mir die Anzahl der Wiederholungen durch die * und + Betreiber abgestimmt zählen können? Ich würde zwar gerne wissen, ob es unter der .NET-Plattform möglich ist.

War es hilfreich?

Lösung

Sie haben Glück, denn in der Tat .NET Regex tut dies (was meiner Meinung nach ziemlich einzigartig ist). Im Wesentlichen in jedem Match, die jeweils Group speichert jede Captures, die gemacht wurde.

So können Sie zählen, wie oft ein wiederholbares Muster einen Eingang abgestimmt durch:

  • eine Erfassungsgruppe zu machen
  • Zählen, wie viele Aufnahmen von dieser Gruppe in jedem Spiel gemacht wurden
    • Sie können auch durch individuelle Erfassung laufen, wenn Sie wollen!

Hier ist ein Beispiel:

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

Diese Drucke ( als auf ideone.com gesehen):

hahahaha 4
huahuahua 3
huahahahuaha 5

API-Referenzen

Andere Tipps

Sie können die Klammern im Ausdruck verwenden, um eine Gruppe zu erstellen und verwenden Sie dann den + oder * Operator auf die Gruppe. Die Captures Eigenschaft des < a href = "http://msdn.microsoft.com/en-us/library/bxdt1k3b.aspx" rel = "nofollow noreferrer"> Group kann, wie oft es wurde angepasst um zu bestimmen, verwendet werden. Das folgende Beispiel zählt die Anzahl von aufeinander folgenden Kleinbuchstaben am Anfang eines Strings:

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

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

, wie etwa "pref ([a-z]+) suff" unter

dann Gruppen-Capture verwenden, die [a-z] + in der Halterung und seine Länge finden?

Sie kann diese Länge für als auch späteren Matching verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top