2013-04-10 13 views
5

Diese Frage wurde bereits gestellt, aber ich habe versucht, eine Lösung in Powershell zu arbeiten, aber bekomme nicht die gewünschten Ergebnisse.Wie man eine Zeichenkette durch Komma trennt, Komma in Anführungszeichen zu ignorieren

$line = '1,2,"N",09/04/13,"P09042013ZSD(1,0)","ZSD"' 
[string[]] $splitColumns = $line.Split('(,)(?=(?:[^"]|"[^"]*")*$)', [StringSplitOptions]'RemoveEmptyEntries') 

Wenn ich Schleife obwohl die geteilten Werte Ich erwarte

1 
2 
"N" 
09/04/13 
"P09042013ZSD(1,0)" 
"ZSD" 

Aber bin immer

1 
2 
N 
09/04/13 
P09042013ZSD 
1 
0 
ZSD 

ich die Regex getestet mit http://regexhero.net/tester/ (Split) mit ExplicitCapture gesetzt und es gibt die gewünschten Ergebnisse.

Arbeitslösung

$RegexOptions = [System.Text.RegularExpressions.RegexOptions] 
$csvSplit = '(,)(?=(?:[^"]|"[^"]*")*$)' 

$splitColumns = [regex]::Split("StringHere", $csvSplit, $RegexOptions::ExplicitCapture) 
+0

Sie können einfach Verwenden Sie einfach Implode & explad für das ... –

+0

Ich denke, das sind Zellen aus einer CSV-Datei oder so? Ich würde lieber sicherstellen, ein unbenutztes Zeichen wie '' '' 'für das Trennzeichen in der Quelldatei zu haben. – Simon

+0

Quelldatei kann nicht berührt werden. – David

Antwort

5

[string].split() Methode akzeptiert keine regex auf Split, aber nur [char[]] oder [string[]].

Sie können wie folgt versuchen:

$line -split ',(?=(?:[^"]|"[^"]*")*$)' 

Power -split akzeptieren regex zum Spalten von Text

Mit .net Sie es wie folgt tun:

[regex]::Split($line , ',(?=(?:[^"]|"[^"]*")*$)') 
+0

Ich habe auch versucht -split. Es fügte hinzu, dass als zusätzliche Zeilen, d. H. 1, 2 3 Elemente wären. Gibt es trotzdem solche Einträge, wie zB StringSplitOptions] RemoveEmptyEntries? – David

+0

@DavidLiddle Haben Sie meinen Code ausprobiert? Ich habe das Capture auf ',' –

+0

Ich habe es mit dem [Regex] :: Split und RegexOptions.ExplicitCapture arbeiten. – David

Verwandte Themen