Hallo zusammen,
ich möchte einen String splitten anhand eines '+'.
Zum Beispiel: VKG+03+107436557+5++07++++00' aus einer Edifact Datei.
Das besondere an edifact dateien ist allerdings, dass in einem Feld (das was zwischen zwei plussen ist) auch ein + stehen kann wenn ein ? fragezeichen davor steht.
Wenn ich jetzt ("VKG+03+107436557+5++07++++00'").Split(new string[] {"+"}) machen würde, ginge das ja mit dem sonderfall nicht. wie kann ich das fragezeichen beachten.
wenn ein fragezeichen vor einem doppelpunkt steht, soll alles genau behandelt werden.
mfg
freako
Dafür würde ich RegEx empfehlen.
(siehe [Artikel] Regex-Tutorial)
your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself
mh wusste gar nich dass man anhand von regex splitten kann, danke für den tipp.
aber was mir noch kopfzerbrechen macht, ist der regex ansich.
string[] ergebnis = System.Text.RegularExpressions.Regex.Split("VKG+03+10743?+6557+5++07++++00'",@"[^\?]\+");
gibt bei mir: VK, 0, 10743?+655, <leer>, +0, <leer>, +00
bin leider auch nich so der experte mit regulären ausdrücken
Hallo. Also mit RexEx geht das ganz sicher.
Mache aber mal genauere Angaben. Möchtest du im string :::{style="color: darkred;"}"A+B++C+++D?+E"){darkred}
nur :::{style="color: darkred;"}"A"){darkred}
, :::{style="color: darkred;"}"B"){darkred}
, :::{style="color: darkred;"}"C"){darkred}
und :::{style="color: darkred;"}"D?+E"){darkred}
erhalten oder auch die (:::
Noch ein Tipp zum Herausfinden des Pattern: On-the-fly Regex-Tester: Regex-Lab
mfg
SeeQuark
Hi, danke schonmal für deine Hilfe SeeQuark.
Aus dem String "A+BC+D?+E" möchte ich nur "A", "B", "C" und "D?+E" rausholen. Das Pattern von dir zerlegt alles in einzelne Buchstaben. (fast)
Das war implizit versteckt mit meinem "die Matches durchgehen".
foreach (Match match in Regex.Matches("A+B++C+++D?+E", @"(\?\+|[^+])+"))
MessageBox.Show(match.Value);
Funktioniert bei mir auf jeden Fall.
mfg
SeeQuark
und das hier ?
foreach(string feld in System.Text.RegularExpressions.Regex.Split("VKG+03+10743?+6557+5++07++++00'", @"(\?\+|[^+])+"))
MessageBox.Show(feld);
... geht nicht.
Schau dir mal meine RegEx-Funktion an.
Imho ist das einfacher als die Split-Methode.
mfg
SeeQuark
hm ja stimmt schon, aber die leeren felder z.B. wie bei
A+B+CDE?+F
(zwischen C und D und E) überspringt er...
das + durch n stern im pattern ersetzen bringts leider auch nicht, dann macht er zwischen jedem ein leeres feld.
Der passende Regex für dich (zum splitten) müsste lauten:
(?<=[^?])[+]
your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself