Moin,
ich verzweifle mal wieder an Regex.
In einer Textdatei stehen mehrere Datensätze, die jeweils von einem Starttag (BEGIN) bis zu einem Endtag (END) gehen. Einzelne Datenfelder liegen jeweils in einer Zeile. Ich will jetzt mit Regex alles was zwischen Starttag und Endtag steht, herausfiltern.
BEGIN
NAME: PUMUCKL
HAARFARBE: ORANGE
END
BEGIN
NAME: EDER
HAARFARBE: KEINE
BESONDERHEIT: HALBGLATZE
END
Bisher sieht das so aus:
Das Problem ist, dass und
Genauer:
Ich konsultiere normalerweise folgende Webseite: regexr.com/. Dort zeigt sich, dass der entscheidende Unterschied, was gefunden wird, im Global-Flag liegt. Mit dem Global-Flag sucht er nach mehreren Vorkommen des Suchstrings, ohne nur nach dem ersten.
Dort eingebenes Pattern:
123ABC321CBA098
123ABC321CBA098
Der Teil, der dem Pattern laut Webseite entspricht, habe ich hier fett hervorgehoben. Lasse ich das Global Flag (/g) weg , dann wir nur der erste Teil als Fund markiert.
Ich finde in C# kein Pendant zu diesem Flag. Ich denke, das sollte
Und sowieso, warum findet
Ich weiß, dass es mehrere Dialekte für reguläre Ausdrücke gibt. Ich finde aber keine Hinweise auf regex.com und in der Microsoft Dokumentation learn.microsoft.com/en-us/dotn…-language-quick-reference die mir da weiterhelfen.
C# verhält sich nicht so, wie ich es aus der Dokumentation herauslese, bzw. verstehe.
Wo liegt der Fehler?
Gruß
Joachim
___
EDIT:
Oh mann, mit dem Pattern
ich verzweifle mal wieder an Regex.
In einer Textdatei stehen mehrere Datensätze, die jeweils von einem Starttag (BEGIN) bis zu einem Endtag (END) gehen. Einzelne Datenfelder liegen jeweils in einer Zeile. Ich will jetzt mit Regex alles was zwischen Starttag und Endtag steht, herausfiltern.
BEGIN
NAME: PUMUCKL
HAARFARBE: ORANGE
END
BEGIN
NAME: EDER
HAARFARBE: KEINE
BESONDERHEIT: HALBGLATZE
END
Bisher sieht das so aus:
Das Problem ist, dass
Matches
gar nix findetMatch
alles.Genauer:
Match
findet alles vom ersten BEGIN
bis zum letzten END
und nicht, wie vielleicht gedacht, vom ersten BEGIN
bis zum ersten END
.Ich konsultiere normalerweise folgende Webseite: regexr.com/. Dort zeigt sich, dass der entscheidende Unterschied, was gefunden wird, im Global-Flag liegt. Mit dem Global-Flag sucht er nach mehreren Vorkommen des Suchstrings, ohne nur nach dem ersten.
Dort eingebenes Pattern:
/(ABC)(.)+(CBA)/g
und folgender Text:123ABC321CBA098
123ABC321CBA098
Der Teil, der dem Pattern laut Webseite entspricht, habe ich hier fett hervorgehoben. Lasse ich das Global Flag (/g) weg , dann wir nur der erste Teil als Fund markiert.
Ich finde in C# kein Pendant zu diesem Flag. Ich denke, das sollte
Matches
und Match
sein. Aber irgendwie bringe ich das nicht zusammen.Matches
nix?Ich weiß, dass es mehrere Dialekte für reguläre Ausdrücke gibt. Ich finde aber keine Hinweise auf regex.com und in der Microsoft Dokumentation learn.microsoft.com/en-us/dotn…-language-quick-reference die mir da weiterhelfen.
C# verhält sich nicht so, wie ich es aus der Dokumentation herauslese, bzw. verstehe.
Wo liegt der Fehler?
Gruß
Joachim
___
EDIT:
Oh mann, mit dem Pattern
(BEGIN:VCARD).*?(END:VCARD)
funktionierts. Was so ein "?" alles ausmacht!Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MasterQ“ ()