Splitting a string and ignoring the delimiter inside quotes

前端 未结 4 1405
轻奢々
轻奢々 2021-02-19 10:48

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

相关标签:
4条回答
  • 2021-02-19 11:10

    A quick workaround could be pre-parse the commas inside the quotes and replace them with another delimiter, split the values and post-parse the values with the delimiter replacing it with the original commas.

    0 讨论(0)
  • 2021-02-19 11:24

    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.

    0 讨论(0)
  • 2021-02-19 11:24

    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("\"", "")

    0 讨论(0)
  • 2021-02-19 11:25

    if using c#, you can use

            string searchQuery = "Fruit,10,\"Bananas, Oranges, Grapes\"";
            List<string> list1 = Regex.Matches(searchQuery, @"(?<match>\w+)|\""(?<match>[\w\s,]*)""").Cast<Match>().Select(m => m.Groups["match"].Value).ToList();
            foreach(var v in list1)
            Console.WriteLine(v);
    

    Output :

    Fruit

    10

    Bananas, Oranges, Grapes

    0 讨论(0)
提交回复
热议问题