【发布时间】:2010-01-13 14:37:37
【问题描述】:
我需要解析一个字符串,所以结果应该像这样输出:
"abc,def,ghi,klm,nop"
但我收到的字符串可能看起来更像这样:
",,,abc,,def,ghi,,,,,,,,,klm,,,nop"
关键是,我事先不知道单词之间有多少个逗号。
有没有我可以在 C# 中使用的正则表达式来帮助我解决这个问题?
【问题讨论】:
我需要解析一个字符串,所以结果应该像这样输出:
"abc,def,ghi,klm,nop"
但我收到的字符串可能看起来更像这样:
",,,abc,,def,ghi,,,,,,,,,klm,,,nop"
关键是,我事先不知道单词之间有多少个逗号。
有没有我可以在 C# 中使用的正则表达式来帮助我解决这个问题?
【问题讨论】:
您可以使用,{2,} 表达式匹配任何出现的 2 个或更多逗号,然后将它们替换为单个逗号。
您可能还需要在那里调用Trim,以删除Regex.Replace 调用中遗留的任何前导或尾随逗号。 (可能有一些方法可以通过正则表达式替换来做到这一点,但没有立即想到。)
string goodString = Regex.Replace(badString, ",{2,}", ",").Trim(',');
【讨论】:
搜索,,+ 并将所有内容替换为,。
所以在 C# 中可能看起来像
resultString = Regex.Replace(subjectString, ",,+", ",");
,,+ 表示“匹配所有出现的两个或更多逗号”,因此不会触及单个逗号。这也可以写成,{2,}。
【讨论】:
没有正则表达式的简单解决方案:
string items = inputString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string result = String.Join(",", items);
【讨论】:
实际上,您无需任何 Trim 调用即可做到这一点。
text = Regex.Replace(text, "^,+|,+$|(?<=,),+", "");
应该可以解决问题。
正则表达式背后的想法是只匹配我们想要删除的那个。第一部分匹配输入字符串开头的任何连续逗号字符串,第二部分匹配末尾的任何连续逗号字符串,而最后一个匹配逗号后面的任何连续逗号字符串。
【讨论】:
这是我的努力:
//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
【讨论】: