3

これは私の前の質問の一種の改善です: 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 つの数字)

改善に関する提案は大歓迎です!

4

1 に答える 1

1

正規表現の素晴らしいツール: http://www.ultrapico.com/Expresso.htm

これが私が思いついた式です(名前付きのキャプチャグループを使用):

\[(?<type>[Ccds])(:(?<a>[\d]+)(-(?<b>[\d]+))?)?\]

ここに画像の説明を入力

于 2013-03-08T10:10:54.477 に答える