Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Splitting a string and ignoring the delimiter inside quotes

I am using .NET's String.Split method to break up a string using commas, but I want to ignore strings enclosed in double quotes for the string. I have read that a

For example, the string below.

Fruit,10,"Bananas, Oranges, Grapes"

I would like to get the following

Fruit
10
"Bananas, Oranges, Grapes"

Currently I am getting the following output

Fruit
10
"Bananas
 Oranges
 Grapes"
enter code here

After following suggestions and the answers provided, here is a sample of what I ended up with. (It worked for me obviously)

Imports Microsoft.VisualBasic.FileIO

Dim fileReader As New TextFieldParser(fileName)

fileReader.TextFieldType = FieldType.Delimited
fileReader.SetDelimiters(",")
fileReader.HasFieldsEnclosedInQuotes = True

While fileReader.EndOfData = False


Dim columnData() As String = fileReader.ReadFields

' Processing of field data

End While
like image 936
Tachi Avatar asked Jan 21 '14 14:01

Tachi


2 Answers

You are better off with a parser, like those mentioned in the comments. That said, it's possible to do it with regex in the following way:

,(?=(?:[^"]*"[^"]*")*[^"]*$)

The positive lookahead ((?= ... )) ensures that there is an even number of quotes ahead of the comma to split on (i.e. either they occur in pairs, or there are none).

[^"]* matches non-quote characters.

like image 89
Jerry Avatar answered Oct 26 '22 10:10

Jerry


I found below is the easiest way, we can do it

string fruits = "Fruit,10,"Bananas, Oranges, Grapes"";
string[] fruitsArr = Regex.Split(fruits, ",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");

Output:

fruitsArr[0] = "Fruit"
fruitsArr[1] = "10"
fruitsArr[2] = "\"Bananas, Oranges, Grapes\""

If you need pure string data so you can do it something like,

fruitsArr[2].Replace("\"", "")

like image 29
Jitendra G2 Avatar answered Oct 26 '22 10:10

Jitendra G2