上手、
次の文字列をフォーマットできません。
string oldFormat = "949123U0456789";
oldFormat = string.Format(@"{0: ###.###-##-###.###}",oldFormat);
結果は次のようになります:949.123-U0-456.789
この文字列をフォーマットするためのより良い方法はありますか?
使用できます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");
または部分文字列で。
正規表現は、文字と数字が混在する場合のフォーマットの問題を解決できます。
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})")
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"));