Laden...

Regex dazu bringen alle Matches auszugeben

Erstellt von Quaneu vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.321 Views
Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 5 Jahren
Regex dazu bringen alle Matches auszugeben

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

16.842 Beiträge seit 2008
vor 5 Jahren

Du verwendest wahrscheinlich Regex.Match statt Regex.Matches.

49.485 Beiträge seit 2005
vor 5 Jahren

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

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 5 Jahren

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!

49.485 Beiträge seit 2005
vor 5 Jahren

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