正则表达式删除字符串中的双/三逗号

时间:2010-01-13 14:37:37

标签: c# regex

我需要解析一个字符串,以便结果输出如下:

"abc,def,ghi,klm,nop"

但我收到的字符串看起来更像是:

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

关键是,我事先并不知道有多少逗号分隔这些词 我可以在C#中使用正则表达式来帮助我解决这个问题吗?

5 个答案:

答案 0 :(得分:11)

您可以使用,{2,}表达式匹配任何两个或更多逗号的匹配项,然后用一个逗号替换它们。

您也可能需要Trim来电,以删除Regex.Replace来电留下的任何前导或尾随逗号。 (有可能通过正则表达式替换有一些方法可以做到这一点,但是没有任何东西可以立即解释。)

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

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

实际上,你可以在没有任何Trim调用的情况下完成。

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

应该这样做。

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

答案 4 :(得分:1)

这是我的努力:

//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