C# 以字母为后缀的字符串的千位分隔符

C# 以字母为后缀的字符串的千位分隔符,c#,.net,string,C#,.net,String,有什么简单的解决方案可以向以字母为后缀的字符串添加千位分隔符吗 例如,我以如下方式获取数据: 123456 km 我想把它变成: 123,456 km 除了剥离后缀数据,执行String.Format(“0:n0”),然后重新添加后缀之外,还有什么简单的解决方案吗 编辑:后缀不是前缀。尝试以下操作: string number = String.Format("0:n0", double.Parse(yournumber.Split(" ").GetValue(0).ToString()))

有什么简单的解决方案可以向以字母为后缀的字符串添加千位分隔符吗

例如,我以如下方式获取数据:

123456 km
我想把它变成:

123,456 km
除了剥离后缀数据,执行
String.Format(“0:n0”)
,然后重新添加后缀之外,还有什么简单的解决方案吗

编辑:后缀不是前缀。

尝试以下操作:

string number = String.Format("0:n0", double.Parse(yournumber.Split(" ").GetValue(0).ToString())) + yournumber.Split(" ").GetValue(1).ToString();
试试这个:

string number = String.Format("0:n0", double.Parse(yournumber.Split(" ").GetValue(0).ToString())) + yournumber.Split(" ").GetValue(1).ToString();
您可以尝试正则表达式:只需提取并替换所有足够长的值,例如

  string source = "the distance was 123456.47 km and the speed was 1234 m/s";

  string result = Regex.Replace(
    source,
    @"([0-9]{4,})((\s*[a-zA-Z]+)|(\.))",
    match => double.Parse(match.Groups[1].Value).ToString("#,##0") +
             match.Groups[2].Value);

  Console.Write(result);
结果

  the distance was 123,456.47 km and the speed was 1,234 m/s
您可以尝试正则表达式:只需提取并替换所有足够长的值,例如

  string source = "the distance was 123456.47 km and the speed was 1234 m/s";

  string result = Regex.Replace(
    source,
    @"([0-9]{4,})((\s*[a-zA-Z]+)|(\.))",
    match => double.Parse(match.Groups[1].Value).ToString("#,##0") +
             match.Groups[2].Value);

  Console.Write(result);
结果

  the distance was 123,456.47 km and the speed was 1,234 m/s

将其用作匹配计算器:

 static string Seprator(Match m)
 {
     return int.Parse(m.ToString()).ToString("N0");
 }
然后,这将为您提供所需的结果:

string result = Regex.Replace(a, "[0-9]+",new MatchEvaluator(Seprator));

以下是将其用作匹配评估器的方法:

 static string Seprator(Match m)
 {
     return int.Parse(m.ToString()).ToString("N0");
 }
然后,这将为您提供所需的结果:

string result = Regex.Replace(a, "[0-9]+",new MatchEvaluator(Seprator));


这是km不是后缀吗?-叹气-是的,我的错。
km
不是后缀吗?-叹气-是的,我的错。是的,我想我可能不得不走这条路。不过谢谢。这个解决方案的问题是,数字和字母之间需要有一个空格。问题是,这个解决方案很有效(特别是对我来说),因为我知道我每次都会有这个空格。你也可以使用LINQ获得第一个字母的索引,然后用它分割suffex。是的,我想我可能得走这条路。谢谢。这个解决方案的问题是数字和字母之间需要有一个空格。问题是,这个解决方案有效(特别是对我来说),因为我知道我每次都会有这个空格。你也可以使用LINQ获得第一个字母的索引,然后用它来分割萨福克斯。虽然你的答案比我需要的更有力。我的数据仅限于一个以距离单位为后缀的数字,如“km”、“mi”等。但这似乎是可行的。@Cristian C:您也可以分析后缀:它是
match.Groups[3]。Value
例如
match=>后缀。Contains(match.Groups[3]。Value.Trim())?double.Parse(match.Groups[1].Value).ToString(“#,#,##0”)+match.Groups[2]。Value:match.Value
,尽管您的答案比我需要的强大得多。我的数据仅限于一个以距离单位为后缀的数字,如“km”、“mi”等。但这似乎是可行的。@Cristian C:您也可以分析后缀:它是
match.Groups[3]。Value
例如
match=>后缀。Contains(match.Groups[3]。Value.Trim())?double.Parse(match.Groups[1].Value.ToString(“#,###0”)+match.Groups[2]。Value:match.Value
怪异的反例:
“fail۰۱۲۽۷۹km”
波斯数字将通过
“\\d+”
模式,但失败
int.Parse
。当然,我怀疑这个和类似的输入是否会出现在上下文中,但有一个简单的补救办法:要么将
\\d
更改为
[0-9]
,要么添加
RegexOptions.ECMAScript
选项。实际上,我是在建议一个解决方案,并没有太多注意Regex模式本身,我认为让解决方案用户可以随意更改它。谢谢你的提醒,我改变了表达方式。奇怪的反例:
“fail۰۱۲۽۵۷۹km”
波斯数字将通过
“\\d+”
模式,但无法
int.Parse
。当然,我怀疑这个和类似的输入是否会出现在上下文中,但有一个简单的补救办法:要么将
\\d
更改为
[0-9]
,要么添加
RegexOptions.ECMAScript
选项。实际上,我是在建议一个解决方案,并没有太多注意Regex模式本身,我认为让解决方案用户可以随意更改它。谢谢你的提醒,我改变了表达方式。