【问题标题】:Regex removing double/triple comma in string正则表达式删除字符串中的双/三逗号
【发布时间】:2010-01-13 14:37:37
【问题描述】:

我需要解析一个字符串,所以结果应该像这样输出:

"abc,def,ghi,klm,nop"

但我收到的字符串可能看起来更像这样:

",,,abc,,def,ghi,,,,,,,,,klm,,,nop"

关键是,我事先不知道单词之间有多少个逗号。
有没有我可以在 C# 中使用的正则表达式来帮助我解决这个问题?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您可以使用,{2,} 表达式匹配任何出现的 2 个或更多逗号,然后将它们替换为单个逗号。

    您可能还需要在那里调用Trim,以删除Regex.Replace 调用中遗留的任何前导或尾随逗号。 (可能有一些方法可以通过正则表达式替换来做到这一点,但没有立即想到。)

    string goodString = Regex.Replace(badString, ",{2,}", ",").Trim(',');
    

    【讨论】:

      【解决方案2】:

      搜索,,+ 并将所有内容替换为,

      所以在 C# 中可能看起来像

      resultString = Regex.Replace(subjectString, ",,+", ",");
      

      ,,+ 表示“匹配所有出现的两个或更多逗号”,因此不会触及单个逗号。这也可以写成,{2,}

      【讨论】:

        【解决方案3】:

        没有正则表达式的简单解决方案:

        string items = inputString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        string result = String.Join(",", items);
        

        【讨论】:

        • 很高兴知道该解决方案!谢谢!
        【解决方案4】:

        实际上,您无需任何 Trim 调用即可做到这一点。

        text = Regex.Replace(text, "^,+|,+$|(?<=,),+", "");
        

        应该可以解决问题。

        正则表达式背后的想法是只匹配我们想要删除的那个。第一部分匹配输入字符串开头的任何连续逗号字符串,第二部分匹配末尾的任何连续逗号字符串,而最后一个匹配逗号后面的任何连续逗号字符串

        【讨论】:

          【解决方案5】:

          这是我的努力:

          //Below is the test string 
          string test = "YK     002       10        23           30         5       TDP_XYZ  "
          private static string return_with_comma(string line)
              {
                  line = line.TrimEnd();
                  line = line.Replace("  ", ",");
                  line = Regex.Replace(line, ",,+", ",");
                  string[] array;
                  array = line.Split(',');
                  for (int x = 0; x < array.Length; x++)
                  {
                      line += array[x].Trim();
                  }
                  line += "\r\n";
                  return line;
              }
           string result = return_with_comma(test);
           //Output is
           //YK,002,10,23,30,5,TDP_XYZ  
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-10-29
            • 2018-01-28
            • 1970-01-01
            • 2014-06-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-07
            相关资源
            最近更新 更多