Regex 如何通过逗号分割字符串忽略双引号中的逗号

Regex 如何通过逗号分割字符串忽略双引号中的逗号,regex,powershell,split,Regex,Powershell,Split,以前有人问过这个问题,但我一直在尝试在powershell中找到解决方案,但没有得到预期的结果 $line = '1,2,"N",09/04/13,"P09042013ZSD(1,0)","ZSD"' [string[]] $splitColumns = $line.Split('(,)(?=(?:[^"]|"[^"]*")*$)', [StringSplitOptions]'RemoveEmptyEntries') 当我循环通过我期望的分割值时 1 2 "N" 09/04/13 "P0904

以前有人问过这个问题,但我一直在尝试在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
我已经使用(Split)和ExplicitCapture集测试了正则表达式,它返回了期望的结果

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

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

$splitColumns = [regex]::Split("StringHere", $csvSplit, $RegexOptions::ExplicitCapture)
[string].split()
方法在拆分时不接受
regex
,只接受
[char[]
[string[]

您可以这样尝试:

 $line -split ',(?=(?:[^"]|"[^"]*")*$)' 
[regex]::Split( $line , ',(?=(?:[^"]|"[^"]*")*$)' )
powershell
-split
accept
regex
用于拆分文本

使用.net,您可以这样做:

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

您可以简单地使用Just Incolde&expload来实现这一点……我猜这些是csv文件中的单元格还是其他的?我宁愿确保有一个未使用的字符,如
用于源文件中的分隔符。无法触摸源文件。我还尝试了-split。它添加了,因为额外的行,即1,2将是3个项目。是否有任何方法可以删除这些条目,例如StringSplitOptions]“RemoveEmptyEntries”的工作方式?@DavidLiddle您是否尝试过我的代码?我已删除了
上的捕获,
我已使用[regex]:Split和RegexOptions.ExplicitCapture。如果删除
上的捕获组,
可以避免
RegexOptions