如何用逗号分隔字符串,忽略双引号中的逗号

Dav*_*vid 6 regex powershell split

之前已经问过这个问题,但我一直试图在powershell中使用一个解决方案但是没有得到预期的结果.

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

当我循环通过我期待的分裂值

1
2
"N"
09/04/13
"P09042013ZSD(1,0)"
"ZSD"
Run Code Online (Sandbox Code Playgroud)

但我得到了

1
2
N
09/04/13
P09042013ZSD
1
0
ZSD
Run Code Online (Sandbox Code Playgroud)

我使用带有ExplicitCapture设置的http://regexhero.net/tester/(Split)测试了正则表达式,并返回了所需的结果.

工作方案

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

$splitColumns = [regex]::Split("StringHere", $csvSplit, $RegexOptions::ExplicitCapture)
Run Code Online (Sandbox Code Playgroud)

CB.*_*CB. 8

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

你可以尝试这样:

 $line -split ',(?=(?:[^"]|"[^"]*")*$)' 
Run Code Online (Sandbox Code Playgroud)

powershell -split接受regex分割文本

使用.net你可以这样做:

[regex]::Split( $line , ',(?=(?:[^"]|"[^"]*")*$)' )
Run Code Online (Sandbox Code Playgroud)