2013-04-10 97 views
5

這個問題分成由逗號忽略逗號字符串之前已經問,但我一直在努力工作的一種解決方案,PowerShell中,但我沒有得到期望的結果。如何在雙引號

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

當我環路儘管拆分值我期待

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

但我得到

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

我與ExplicitCapture測試使用http://regexhero.net/tester/(拆分)的正則表達式設置並返回期望的結果。

工作液

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

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

可以簡單地使用剛剛破滅&expload爲... – 2013-04-10 13:41:41

+0

我想那些是從一個csv文件或單元格?我寧願確保在源文件中有一個未使用的字符,例如';'作爲分隔符。 – Simon 2013-04-10 13:42:35

+0

無法觸摸源文件。 – David 2013-04-10 13:50:08

回答

5

[string].split()方法不接受regex上分裂只是[char[]][string[]]

你可以嘗試這樣的:

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

PowerShell的-split接受regex一個分裂的文本

使用.NET,你可以做這樣的:

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

我也試過了 - 分裂。它增加了,作爲額外的行,即1,2將是3個項目。無論如何刪除這些條目,如StringSplitOptions]'RemoveEmptyEntries'如何工作? – David 2013-04-10 13:52:08

+0

@DavidLiddle你有沒有試過我的代碼?我已經刪除了'',' – 2013-04-10 13:55:49

+0

上的捕獲,我用它處理了[正則表達式] :: Split和RegexOptions.ExplicitCapture。 – David 2013-04-10 13:56:55