0

出色地,

我只是无法格式化以下字符串:

string oldFormat = "949123U0456789";
oldFormat = string.Format(@"{0: ###.###-##-###.###}",oldFormat);

结果应该是:949.123-U0-456.789

有没有人有更好的方法来格式化这个字符串?

4

3 回答 3

8

您可以使用Insert

"949123U0456789".Insert(11, ".").Insert(8, "-").Insert(6, "-").Insert(3, ".")

请注意,我是从末尾插入,以避免添加插入的字符串影响索引。

您使用的格式字符串适用于数字类型 - 字符串不是数字类型(当将字符串传递给 时string.Format,它只会被返回,因为它已经是一个字符串)。

还有其他方法,如Format string with dashes所示:

使用正则表达式:

Regex.Replace("949123U0456789",
              @"^(.{3})(.{3})(.{2})(.{3})(.{3})$",
              "$1.$2-$3-$4.$5");

或使用子字符串。

于 2012-08-16T14:07:57.370 回答
1

正则表达式可以解决字母和数字混合时的格式问题。

        using System.Text.RegularExpressions;

        string pattern = @"([a-z0-9A-Z]{3})([a-z0-9A-Z]{3})
                    ([a-z0-9A-Z]{2})([a-z0-9A-Z]{3})([a-z0-9A-Z]{3})"
        string oldFormat = "949123U0456789";
        string newFormat = Regex.Replace(oldFormat, pattern, 
                    "$1.$2-$3-$4.$5");

我喜欢正则表达式 :D,如果它必须遵循某种约定(即执行验证),它们还有一个额外的好处是允许您检查代码的语法。

为了执行验证,您可以使用:

        Regex.IsMatch(oldFormat, 
                    @"([a-z0-9A-Z]{3})([a-z0-9A-Z]{3})
                    ([a-z0-9A-Z]{2})([a-z0-9A-Z]{3})
                    ([a-z0-9A-Z]{3})")
于 2012-08-16T14:12:39.537 回答
0
string s="949123U0456789";

Regex r=new Regex(@"(\w{3})(\w{3})(\w{2})(\w{3})(\w{3})");
Console.WriteLine(r.Replace(s,"$1.$2-$3-$4.$5"));
于 2012-08-16T14:17:40.050 回答