Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to split a string by comma ignoring comma in double quotes

This question has been asked before but I have been trying to work a solution in powershell but am not getting the desired results.

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

When I loop though the split values I am expecting

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

But am getting

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

I have tested the regex using http://regexhero.net/tester/ (Split) with ExplicitCapture set and it returns the desired results.

Working solution

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

$splitColumns = [regex]::Split("StringHere", $csvSplit, $RegexOptions::ExplicitCapture)
like image 569
David Avatar asked Apr 10 '13 13:04

David


People also ask

How do you split a string with double quotes?

split("(? =\"[^\"]. *\")");

How do you split a string after a comma?

To split a string with comma, use the split() method in Java. str. split("[,]", 0);

How do you split quotation marks?

Question marks and exclamation marks go inside the quotation marks when they are part of the original quotation. For split quotations, it's also necessary to add a comma after the first part of the quotation and after the narrative element (just like you would with a declarative quotation).


1 Answers

[string].split() method doesn't accept regex on split but just [char[]] or [string[]].

You can try like this:

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

powershell -split accept regex for splitting text

Using .net you can do it like this:

[regex]::Split( $line , ',(?=(?:[^"]|"[^"]*")*$)' )
like image 60
CB. Avatar answered Oct 21 '22 03:10

CB.