我需要解析一个字符串,以便结果输出如下:
"abc,def,ghi,klm,nop"
但我收到的字符串看起来更像是:
",,,abc,,def,ghi,,,,,,,,,klm,,,nop"
关键是,我事先并不知道有多少逗号分隔这些词 我可以在C#中使用正则表达式来帮助我解决这个问题吗?
答案 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