C#获取两个字符之间字符串中的字符串

问题描述:

我有一个字符串象下面这样:C#获取两个字符之间字符串中的字符串

{{"textA","textB","textC"}} 

而目前,我使用下面的代码,以分割他们:

string stringIWantToSplit = "{{\"textA\",\"textB\",\"textC\"}}"; 
string[] result = stringIWantToSplit.Split(','); 

,我可以得到下面的结果:

{{"textA" 
"textB" 
"textC"}} 

在那之后,我可以手动修剪出的“{”和“}”得到最终的结果,但现在的问题是:

如果字符串是象下面这样:

`{{"textA","textB,textD","textC"}}` 

那么结果将是预期的结果不同

预期结果:

"textA" 
    "textB,textD" 
    "textC" 

实际结果:

{{"textA" "textB textD" "textC"}}

如何获得两个双引号之间的字符串?


更新时间:

刚才当我检查了数据,我发现,他们中的一些包含小数,即

{{"textA","textB","",0,9.384,"textC"}} 

目前,我试图用Jenish Rabadiya的做法,我使用的正则表达式是

(["'])(?:(?=(\\?))\2.)*?\1

但与此正则表达式中,数字未选中,如何修改它,以便可以选择数字/小数?

+5

你看过使用正则表达式吗? –

+1

看起来与此相关:http://*.com/questions/21342949/how-can-i-split-a-string-while-ignore-commas-in-between-quotes?rq=1 –

+0

停止滚动你自己CSV解析器http://secretgeek.net/csv_trouble –

尝试使用像下面的正则表达式。

Regex regex = new Regex(@"([""'])(?:(?=(\\?))\2.)*?\1"); 
foreach (var match in regex.Matches("{{\"textA\",\"textB\",\"textC\"}}")) 
{ 
    Console.WriteLine(match); 
} 

这里工作的dotnet小提琴=>Link

+0

我试图使用你的方法,但是当我修改数据时,有一些数字,我该如何更改正则表达式以便可以选择数字?(请看我的更新) – User2012384

我认为这会帮助你,

List<string> specialChars = new List<string>() {",", "{{","}}" }; 
string stringIWantToSplit = "{{\"textA\",\"textB,textD\",\"textC\"}}"; 
string[] result = stringIWantToSplit.Split(new char[] {'"'}, StringSplitOptions.RemoveEmptyEntries) 
      .Where(text => !specialChars.Contains(text)).ToArray(); 

使用这个表达式使得简单:

text = Regex.Replace(text, @"^[\s,]+|[\s,]+$", ""); 

假设你的字符串总是看起来像你的例子,你可以使用一个简单的正则表达式来获得你的字符串输出:

string s = "{{\"textA\",\"textB,textD\",\"textC\"}}"; 

foreach (Match m in Regex.Matches(s, "\\\".*?\\\"")) 
{ 
    //do stuff 
} 

我终于修改了正则表达式是:

(["'])(?:(?=(\\?))\2.)*?\1|(\d*\.?\d*)[^"' {},] 

这最后的工作原理:

样品:

https://dotnetfiddle.net/vg4jUh