【问题标题】:C# Get string between two characters in a stringC#获取字符串中两个字符之间的字符串
【发布时间】:2015-02-05 04:37:33
【问题描述】:

我有一个如下字符串:

{{"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

但是使用这个正则表达式,没有选择数字,如何修改它以便可以选择数字/小数?

【问题讨论】:

标签: c# string split


【解决方案1】:

尝试使用正则表达式,如下所示。

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

这是工作 dotnet fiddle => Link

【讨论】:

  • 我正在尝试使用您的方法,但是当我修改数据时,有一些数字,如何更改正则表达式以便可以选择数字?(请看我的更新)
【解决方案2】:

假设您的字符串总是看起来像您的示例,您可以使用一个简单的正则表达式来获取您的字符串:

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

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

【讨论】:

    【解决方案3】:

    我想这会对你有所帮助,

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        这终于奏效了:

        示例:

        https://dotnetfiddle.net/vg4jUh

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-13
          • 2012-12-28
          • 2013-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多