2013-04-10 42 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