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

时间:2015-02-05 04:37:34

标签: c# string split

我有一个如下字符串:

{{"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 个答案:

答案 0 :(得分:3)

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

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

这是工作的dotnet fiddle => Link

答案 1 :(得分:2)

假设您的字符串看起来像您的示例,您可以使用简单的正则表达式来解决问题:

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

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

答案 2 :(得分:1)

我认为这会对你有帮助,

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();

答案 3 :(得分:1)

使用这个正则表达式很简单:

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

答案 4 :(得分:0)

我最终将正则表达式修改为:

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

这最终有效:

样品:

https://dotnetfiddle.net/vg4jUh