Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 格式化字符串_C#_String_Format - Fatal编程技术网

C# 格式化字符串

C# 格式化字符串,c#,string,format,C#,String,Format,那么 我无法格式化以下字符串: string oldFormat = "949123U0456789"; oldFormat = string.Format(@"{0: ###.###-##-###.###}",oldFormat); 结果应该是:949.123-U0-456.789 是否有人有更好的方法格式化此字符串?您可以使用: 请注意,我是从末尾插入的,以避免添加插入的字符串影响索引 您使用的格式字符串用于数字类型-字符串不是数字类型(当将字符串传递到string.format,它将简单

那么

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

string oldFormat = "949123U0456789";
oldFormat = string.Format(@"{0: ###.###-##-###.###}",oldFormat);
结果应该是:949.123-U0-456.789

是否有人有更好的方法格式化此字符串?

您可以使用:

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

您使用的格式字符串用于数字类型-字符串不是数字类型(当将字符串传递到
string.format
,它将简单地返回,因为它已经是一个字符串)

还有其他方法,如图所示:

使用正则表达式:

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

或者使用子字符串。

Regex可以解决字母和数字混合时的格式问题

        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})")

#
表示数字。在字符串的中间有一个<代码> U/COD>,这不是一个数字。此外,当将字符串传递到
string.Format
时,该字符串不会发生任何变化-它将按原样返回。可能是我在stackoverflow上找到的[this][1]的重复项。它使用LINQ。[1] :非常聪明!人们应该按顺序指出他的注意力。从后到前,按照顺序进行操作非常重要。伟大而简单!
        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})")
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"));