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

本文关键字:一个 有一个 分隔 字符串 格式 字符 | 更新日期: 2023-09-27 18:18:47

我的目标是获得如下格式的字符串:" 0,1,2,3,4,7,10 "以一个逗号分隔的数字,开头和结尾不能有逗号。

如果我有字符串" 0,1,2,4 "我想去掉两个逗号中的一个,这样就只剩下" 0,1,2,4 "

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

然而,问题是我不知道可能有多少逗号。例如,我可能有这样的情况"0,,,,,,,1,2,3,,,,5"我需要把它变成"0,1,2,3,5"

我如何用c# (.net webforms)完成这个?也许与正则表达式有关?但我对这些不太熟悉。这是唯一的办法吗?

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

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

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

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

就是

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

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

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

MSDN Regex表达式快速参考

不删除不需要的字符,而是使用原始字符串中的数字形成一个新的干净字符串。

可以使用正则表达式
string input = "0,,,  .+=/ garbage,,,,1,,2,3,,,,5";
string output = String.Join(", ", Regex.Matches(input, @"'d+")
                                       .Cast<Match>()
                                       .Select(m => m.Value));

您可以使用string.SplitStringSplitOptions.RemoveEmptyEntriesstring.Join:

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

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

你正在寻找一个正则表达式模式'd,?,其中:

'd将匹配任何数字,

,?匹配char , 0次或1次。

实时正则表达式在这里!

你的代码片段看起来像这样:

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "0,,,,,,,1,,2,3,,,,5";
            string fstr = "";
           Regex RegExp = new Regex(@"'d,?");
           MatchCollection matches = RegExp.Matches(str);
           foreach (Match match in matches) 
           {
               fstr = fstr + match.ToString();
           }
            Console.Write(fstr);
            Console.Read();
        }
    }
}