Ich muss eine kommagetrennte Zeichenfolge trennen, deren Inhalt manchmal zwischen Anführungszeichen steht. Ein Beispiel könnte sein:Getrennte Zeichenfolge trennen und Escape-Sequenzen entfernen
1, "TEST", 22345 "18,95", Ab "cde
Das erste Problem hier ist die Zeichenfolge aufteilen nur, wenn das Komma nicht umgeben ist durch Zitate wie "18,95". Ich habe das mit einem einfachen Regex gemacht. Das nächste Problem ist, die Zitate auszuschneiden, wo sie den Inhalt umgeben. Für "TEST" und "18,95" sollten die Zitate entfernt werden .Das Zitat in Ab cde sollte unberührt bleiben. Hier ist mein Code so weit:
List<string> results = Regex.Matches(this.Content, @"[\""](.+?)[\""]|[^,]+")
.Cast<Match>()
.Select(m => m.Value)
.Select(s => s.StartsWith("\"") && s.EndsWith("\"") ? s.Remove(1,1).Remove(s.Length-1,1) : s)
.ToList();
Für die zweite Select
erhalte ich eine ArgumentOutOfRangeException
seit dem zweiten Remove
nicht mit s
mehr funktioniert. Ich dachte, es sollte funktionieren, aber irgendwie nicht.
Wenn es einen besseren Weg dazu gibt, würde ich mich freuen, darüber zu erfahren.
Haben Sie versuchen, eine CSV-Parser? –
Hinweis: String ist unveränderlich. – Karolis
@ WiktorStribiżew Ich versuche eine zu implementieren –