Gibt es einen regex Geschmack, der mir die Anzahl der Wiederholungen durch die * und + Betreiber abgestimmt zählen können?
-
26-09-2019 - |
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.
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.