6

この質問は以前に尋ねられましたが、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/ (Split) を使用して正規表現をテストしたところ、目的の結果が返されました。

ワーキングソリューション

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

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

1 に答える 1

8

[string].split()regexメソッドは分割では受け入れませんが、 [char[]]orのみを受け入れ[string[]]ます。

次のように試すことができます:

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

powershellはテキストを分割するために-split受け入れますregex

.net を使用すると、次のように実行できます。

[regex]::Split( $line , ',(?=(?:[^"]|"[^"]*")*$)' )
于 2013-04-10T13:39:06.150 に答える