string.split - durch Trennzeichen für mehrere Zeichen

151

Ich habe Probleme beim Teilen eines Strings in c # mit einem Trennzeichen von "] [".

Zum Beispiel die Zeichenfolge "abc] [rfd] [5] [,] [."

Sollte ein Array ergeben, das enthält;
abc
rfd
5
,
.

Aber ich kann es scheinbar nicht zum Laufen bringen, selbst wenn ich RegEx versuche, kann ich das Trennzeichen nicht aufteilen.

EDIT: Im Wesentlichen wollte ich dieses Problem lösen, ohne dass ein regulärer Ausdruck erforderlich ist. Die Lösung, die ich akzeptiere, ist:

string Delimiter = "][";  
var Result[] = StringToSplit.Split(new[] { Delimiter }, StringSplitOptions.None);

Ich bin froh, diese geteilte Frage lösen zu können.


quelle
Zeigen Sie uns Ihren Code, der fehlschlägt.
Konrad Rudolph
Bitte posten Sie auch, was Sie daraus machen, zusätzlich zu dem, was Sie gepostet haben, was Sie daraus machen möchten.
Lasse V. Karlsen
2
Mögliches Duplikat von
Teilen Sie

Antworten:

268

Um beides string.Splitund die RegexVerwendung zu zeigen :

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None);
string[] parts2 = Regex.Split(input, @"\]\[");
Marc Gravell
quelle
5
Oder wenn Ihr minimaler Code wie ich anal ist: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);'
Paul Grimshaw
2
Was ist der Vorteil der Bereitstellung des StringSplitOptions.NoneOver input.Split(new string[] { "][" })?
Seebiscuit
1
Dies setzt voraus, dass es beide Charaktere gibt, oder? Was ist, wenn ich durch "[" oder "]" teilen möchte? Von meinen bisherigen Tests denke ich, dass das eine andere Geschichte ist, oder?
C4d
Danke, es funktioniert !!
Kumar
3
@ C4u String.Split("[]".ToCharArray())dies würde durch beide [und] getrennt aufgeteilt. Zum Beispiel: Hallo [Welt] Es ist [Ich! wäre: Hallo Welt, es ist ich!
Ma Dude
36
string tests = "abc][rfd][5][,][.";
string[] reslts = tests.Split(new char[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries);
SwDevMan81
quelle
8
Beachten Sie, dass dieser Ansatz davon ausgeht, dass er bedeutet, sich auf alle] und [aufzuteilen, auch wenn sie nicht in der Kombination] [erscheinen.
Lasse V. Karlsen
2
Diese Überladung von string.Split behandelt es als zwei separate Trennzeichen - einfach verwerfen Sie den Rest. Es gibt eine Überladung, die eine Zeichenfolge als Trennzeichen akzeptiert (eigentlich ein Array von Zeichenfolgen) - Sie müssen also die leeren Werte nicht entfernen (was auch bedeutet: Sie können leere Werte finden , wenn sie in den Daten gültig vorhanden sind)
Marc Gravell
Ihre Annahme ist [richtig. Er gab nicht an, also gab ich ihm etwas, das für sein Beispiel funktionieren würde. Wenn er sie nicht überspringen will, würde es funktionieren. Aber ohne weitere Informationen werden wir nie erfahren
SwDevMan81
Das habe ich gesucht. In der Frage war es ein einfaches Problem, aber dies ist eine fortgeschrittene Antwort.
Bitterblue
Genau das habe ich gesucht. Aber die richtige Antwort ist auch eine Neuigkeit für mich. Ich wusste nicht, dass Sie sich mit mehr als einem Charakter trennen können, wie Marc es beschrieben hat. Die Syntax ist ziemlich blöd.
Piotr Kula
13

Andere Option:

Ersetzen Sie das Zeichenfolgenbegrenzer durch ein einzelnes Zeichen und teilen Sie es dann auf dieses Zeichen auf.

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Replace("][","-").Split('-');
seabass2020
quelle
1
Das ist was ich mache. Es gibt mir eine normalisierte, allgemeine Methode, die auf allen Plattformen funktioniert, ohne mich um plattformspezifische Tricks kümmern zu müssen.
David Betz
5
Keine gute Idee. Bedenken Sie : string input = "abc][rf-d][5". Das "-" in "rf-d" wird als Trennzeichen abgefangen. Siehe stattdessen die oben akzeptierte Antwort.
Gilad Barner
In diesem Fall ersetzen und teilen Sie ein unwahrscheinliches Zeichen wie ~ oder `oder sogar ein Nicht-Tastatur-Zeichen wie ¿oder and usw.
seabass2020
1
Ich mag die Lösung für den Fall, dass sie klar und robust ist und sich normalisieren kann. Meine NutzungDim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer
2
Regex.Split("abc][rfd][5][,][.", @"\]\]");
Christopher Klewes
quelle