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 に答える