Hallo zusammen,
ich habe eine Frage zu Regex in Bezug auf Matches.
Wenn ich folgenden Namen "abc" und diesen mit dem Regex "^(?<1>[a|b])*(?<2>[b|c]){2,}$" prüfen will. Dann bekomme ich als Ergebnis ein Match, jedoch mit folgender Aussage:
Start Length
Match 1: abc 0 3
Group "1": a 0 1
Group "2": c 2 1
Das "b" geht verloren bzw. wird nicht als Treffer in Group "2" angezeigt. Ich bräuchte jedoch als Resultat folgendes:
Start Length
Match 1: abc 0 3
Group "1": a 0 1
Group "2": b 1 1
Group "2": c 2 1
Was nicht reichen würde, ist
Start Length
Match 1: abc 0 3
Group "1": a 0 1
Group "2": bc 1 2
Weiß jemand wie ich den Regex dazu bringe, mir dies auszugeben?
Vielen Dank und schöne Grüße
Quaneu
Du verwendest wahrscheinlich Regex.Match statt Regex.Matches.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt,
durch das ^ und $ gibt es (pro Zeile) immer nur genau einen Match. Matches hilft also nicht.
Hallo Quaneu,
die Information, die du suchst, steht in Captures nicht in Groups, genauer:
foreach (Capture capture in match.Groups["2"].Captures) { ... }
On-the-fly Regex-Tester: Regex-Lab zeigt dir auf Wunsch auch die Captures an (bzw. erkennt man die Captures schon durch die unterschiedliche Helligkeit der (Grund-)Farbe der zugehörigen Gruppe direkt in der Input-Box).
herbivore
Hallo herbivore,
vielen vielen Dank für deine Antwort 🙂. Du hast Recht. Ich hab mir gestern zwar den Match bzw. die Groups in dem Match immer wieder angeschaut, aber die Captures nicht mehr, da die Group "2" als Value nur "c" hat. Kann es sein das dies auch "spezielles" Feature des .Net Regex ist?
Schöne Grüße und nochmals vielen Dank
Gennaro
P.S.
Dein Tool ist wirklich super 👍 👍 👍 kommt jetzt immer zum Einsatz!
Hallo Quaneu,
Kann es sein das dies auch "spezielles" Feature des .Net Regex ist?
was heißt schon speziell? Jedenfalls ist es Absicht. Denn irgendwie muss es ja geregelt sein, nämlich so (Hervorhebung von mir):
The real utility of the Captures property occurs when a quantifier is applied to a capturing group so that the group captures multiple substrings in a single regular expression. In this case, the Group object contains information about the last captured substring, whereas the Captures property contains information about all the substrings captured by the group.
herbivore