C# - 需要由一个且只有一个逗号分隔的字符格式的字符串
C# - Need string in format of characters separated by one and only one comma
我的目标是获取格式为“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”。 =11=]
如何使用 C# (.net webforms) 完成此操作?
也许与正则表达式有关?但我对那些不太熟悉。那是唯一的方法吗?
简直就是
string test = "0,,,,,,,1,,2,3,,,,5";
string result = Regex.Replace(test, ",+", ", ");
模式表达式中逗号后面的加号表示
Matches the previous element one or more times.
不要删除不需要的字符,而是使用原始字符串中的数字形成一个新的干净字符串。您可以为此使用正则表达式
string input = "0,,, .+=/ garbage,,,,1,,2,3,,,,5";
string output = String.Join(", ", Regex.Matches(input, @"\d+")
.Cast<Match>()
.Select(m => m.Value));
您可以用逗号拆分字符串,删除空元素,然后将这些元素重新连接在一起。
string str = "0,,,,,,,1,,2,3,,,,5";
var singleComma = string.Join(",",
str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
虽然这不使用 RegEx,但它可能会稍微快一些,因为它使用专门为此目的设计的操作而不是一般的模式匹配。话又说回来,除非你有一个非常大的字符串或很多,否则任何性能提升都可能无关紧要。
您可以将 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
将匹配任何数字,
和 ,?
将匹配字符 ,
零次或一次。
您的代码片段应该类似于:
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();
}
}
}
我的目标是获取格式为“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”。 =11=]
如何使用 C# (.net webforms) 完成此操作? 也许与正则表达式有关?但我对那些不太熟悉。那是唯一的方法吗?
简直就是
string test = "0,,,,,,,1,,2,3,,,,5";
string result = Regex.Replace(test, ",+", ", ");
模式表达式中逗号后面的加号表示
Matches the previous element one or more times.
不要删除不需要的字符,而是使用原始字符串中的数字形成一个新的干净字符串。您可以为此使用正则表达式
string input = "0,,, .+=/ garbage,,,,1,,2,3,,,,5";
string output = String.Join(", ", Regex.Matches(input, @"\d+")
.Cast<Match>()
.Select(m => m.Value));
您可以用逗号拆分字符串,删除空元素,然后将这些元素重新连接在一起。
string str = "0,,,,,,,1,,2,3,,,,5";
var singleComma = string.Join(",",
str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
虽然这不使用 RegEx,但它可能会稍微快一些,因为它使用专门为此目的设计的操作而不是一般的模式匹配。话又说回来,除非你有一个非常大的字符串或很多,否则任何性能提升都可能无关紧要。
您可以将 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
将匹配任何数字,
和 ,?
将匹配字符 ,
零次或一次。
您的代码片段应该类似于:
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();
}
}
}