5 Stimmen

Gibt es eine Regex-Variante, mit der ich die Anzahl der Wiederholungen zählen kann, die mit den Operatoren * und + übereinstimmen?

Gibt es eine Regex-Variante, die es mir ermöglicht, die Anzahl der Wiederholungen zu zählen, die mit der * y + Betreiber? Ich würde speziell gerne wissen, ob es unter der .NET-Plattform möglich ist.

10voto

polygenelubricants Punkte 362173

Sie haben Glück, denn .NET Regex tut dies tatsächlich (was meiner Meinung nach ziemlich einzigartig ist). Im Wesentlichen in jedem Match jeder Group speichert alle Captures die gemacht wurde.

Sie können also zählen, wie oft ein wiederholbares Muster mit einer Eingabe übereinstimmt:

  • Aus der Gruppe eine Erfassungsgruppe machen
  • Zählen, wie viele Fänge die jeweilige Gruppe in jedem Spiel gemacht hat
    • Wenn Sie möchten, können Sie auch durch einzelne Aufnahmen iterieren!

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

Dies druckt ( wie auf ideone.com gesehen ):

hahahaha 4
huahuahua 3
huahahahuaha 5

API-Referenzen

3voto

Phil Ross Punkte 24282

Sie können Klammern im Ausdruck verwenden, um eine Gruppe zu erstellen und dann die + o * Operator auf die Gruppe. Die Website Captures Eigenschaft der Group kann verwendet werden, um festzustellen, wie oft es übereinstimmt. Das folgende Beispiel zählt die Anzahl der aufeinanderfolgenden Kleinbuchstaben am Anfang einer Zeichenfolge:

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

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

0voto

Lie Ryan Punkte 57966

Wie wäre es, wenn Sie "pref ([a-z]+) suff"

dann Gruppen verwenden, um das [a-z]+ in der Klammer zu erfassen und seine Länge zu ermitteln?

Sie können diese Länge auch für den späteren Abgleich verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X