このような文字列をフォーマットしたい
BPT4SH9R0XJ6
このようなものに
BPT4-SH9R-0XJ6
文字列は常に12文字と数字の組み合わせになります
どんなアドバイスでも大歓迎です、ありがとう
試すRegex.Replace(input, @"(\w{4})(\w{4})(\w{4})", @"$1-$2-$3");
正規表現はしばしば嘲笑されますが、必要なことを行うにはかなりきちんとした方法です。文字列メソッドを使用して満たすのが難しい、より複雑な要件に拡張できます。
"(.{4})(.{4})(.{4})"
あなたはあなたの表現"$1-$2-$3"
としてそしてあなたの代わりとして使うことができます。ただし、これは正規表現の適切な使用法ではありません。を使用すると、はるかに簡単に実行できますSubstring
。
var res = s.Substring(0,4)+"-"+s.Substring(4,4)+"-"+s.Substring(8);
ルールが常に4文字の3つのブロックに分割される場合は、regexpは必要ありません。
str.Substring(0,4) + "-" + str.Substring(4,4) + "-" + str.Substring(8,4)
との組み合わせでString.Concat
、string.Substring
必要なものすべてを処理する必要があるように思われます。
var str = "BPT4SH9R0XJ6";
var newStr = str.Substring(0, 4) + "-" + str.Substring(4, 4) + "-" + str.Substring(8, 4);
正規表現を実行したい理由はありますか?ハイフンを挿入するだけです。
string s = "BPT4SH9R0XJ6";
for(int i = 4; i < s.length; i = i+5)
s = s.Insert(i, "-");
これにより、4文字ごとにハイフンが追加され続け、文字列が短すぎたり長すぎたりしてもエラーが発生しません。
return original_string.SubString(0,4)+"-"+original_string.SubString(4,4)+"-"+original_string.SubString(8,4);
string str = @"BPT4SH9R0XJ6";
string formattedString = string.Format("{0}-{1}-{2}", str.Substring(0, 4), str.Substring(4,4), str.Substring(8,4));
これは、任意の長さの文字列で機能します。
for (int i = 0; i < (int)Math.Floor((myString.Length - 1) / 4d); i++)
{
myString = myString.Insert((i + 1) * 4 + i, "-");
}
これを使用して終了しました
var original = "BPT4SH9R0XJ6".ToCharArray();
var first = new string(original, 0, 4);
var second = new string(original, 4, 4);
var third = new string(original, 8, 4);
var mystring = string.Concat(first, "-", second, "-", third);
ありがとう
操作しているテキストが 12 文字のコードであることが保証されている場合は、なぜ部分文字列を使用しないのでしょうか? なぜ正規表現が必要なのですか?
String theString = "AB12CD34EF56";
String theNewString = theString.Substring(0, 4) + "-" + theString.Substring(4, 4) + "-" + theString.Substring(8, 4);'