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)完成这个?也许与正则表达式有关?但我对这些不太熟悉。这是唯一的办法吗?
您可以使用逗号分隔字符串,删除空元素,然后将元素重新连接在一起。
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.Split
与StringSplitOptions.RemoveEmptyEntries
和string.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();
}
}
}