これは私の前の質問の一種の改善です: c# パターンに基づいてランダムな文字列を生成します
私は以下のようなコードを持っています:
class Generator
{
private static readonly Random R = new Random();
private static readonly char[] L = { 'a', 'b', 'c', 'd', 'e' };
private static readonly char[] U = { 'A', 'B', 'C', 'D', 'E' };
private static readonly char[] S = { '!', '@', '#', '$', '%' };
public static string FromPattern(string pattern)
{
return Regex.Replace(pattern, @"\[([Ccds])(?::([\d]+))?\]", ReplaceSingleMatch);
}
private static string ReplaceSingleMatch(Match m)
{
int length;
if (!int.TryParse(m.Groups[2].Value, out length))
length = 1;
var output = new StringBuilder();
while (output.Length != length)
{
switch (m.Groups[1].Value)
{
case "d"://digits
output.Append(R.Next(0, 9));
break;
case "c"://lowercase char
output.Append(L[R.Next(L.Length)]);
break;
case "C"://uppercase char
output.Append(U[R.Next(U.Length)]);
break;
case "s"://special char
output.Append(S[R.Next(S.Length)]);
break;
}
}
return output.ToString();
}
}
上記を使用して、次のように記述できます。
Generator.FromPattern("ID: [d:3][c:2]#[C][s:2]")
そして、次のようなサンプル出力が得られます。ID: 263ac#D$!
入力する[d]
と 1 桁、入力する[d:5]
と 5 桁になります。
追加したいのは範囲なので、入力する[d:2-5]
と2から5のランダムな数字がランダムに取得されます.
私の最大の問題は正規表現です。残りは簡単です:)
以下のグループを検索するには、正規表現が必要です。
[d]
、[d:3]
(コロンの後の数字でなければなりません)、[d:2-5]
(ダッシュで区切られた 2 つの数字)
改善に関する提案は大歓迎です!