C# - 需要以一个且只有一个逗号分隔的字符格式的字符串

时间:2015-10-21 20:58:10

标签: c# regex string replace character

我的目标是获得格式为:" 0,1,2,3,4,7,10和#34; 数字由一个逗号分隔,开头或结尾没有逗号。

如果我有字符串" 0,1,2,4和34; 我想删除两个逗号中的一个,这样我将留下" 0,1,2,4和#34;

我试过了.Replace(",,", ",")

然而,问题是我不知道可能有多少逗号。因此,例如,我可能会遇到类似" 0 ,,,,,,, 1,2,3 ,,,, 5"我需要把它变成" 0,1,2,3,5"

如何使用C#(.net webforms)实现此目的? 也许与正则表达式有关?但我对这些并不太熟悉。这是唯一的方法吗?

5 个答案:

答案 0 :(得分:10)

您可以在逗号上拆分字符串,删除空元素,然后将元素重新连接在一起。

string str = "0,,,,,,,1,,2,3,,,,5";
var singleComma = string.Join(",", 
    str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));

虽然这不使用RegEx,但它可能会稍快一些,因为它使用专门为此目的而设计的操作,而不是一般的模式匹配。然后,除非你有一个非常大的字符串或许多字符串,否则任何性能提升都无关紧要。

答案 1 :(得分:8)

只是

string test = "0,,,,,,,1,,2,3,,,,5";
string result = Regex.Replace(test, ",+", ", ");

模式表达式中逗号后面的加号表示

  

匹配前一个元素一次或多次。

MSDN Quick Reference on Regex expressions

答案 2 :(得分:6)

不是删除不需要的字符,而是使用原始字符串中的数字形成一个新的干净字符串。您可以使用正则表达式

string input = "0,,,  .+=/ garbage,,,,1,,2,3,,,,5";
string output = String.Join(", ", Regex.Matches(input, @"\d+")
                                       .Cast<Match>()
                                       .Select(m => m.Value));

答案 3 :(得分:4)

您可以将string.SplitStringSplitOptions.RemoveEmptyEntriesstring.Join

一起使用
string input = "0,,,,,,,1,,2,3,,,,5";
string[] split = input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string result = string.Join(",", split);

答案 4 :(得分:0)

这是使用正则表达式的另一种方法。

您正在寻找正则表达式模式 File "E:\password.py", line 98, in program_start find_account() File "E:\password.py", line 36, in find_account if search in f: File "C:\Python24\lib\shelve.py", line 107, in __contains__ return self.dict.has_key(key) AttributeError: 'int' object has no attribute 'has_key' ,其中:

\d,?将匹配任何数字,

\d将匹配char ,?零次或一次。

<强> Realtime regex here!

您的代码段如下所示:

,
相关问题