正则表达式 - 改进搜索并添加第三组

时间:2013-03-08 10:01:13

标签: c# regex .net-3.5

这是我上一个问题的改进:c# generate random string based on pattern

我的代码如下:

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]时,我会得到一位数,如果我输入[d:5],我会得到5位数。

我想添加的是范围,所以当我输入[d:2-5]时,我会随机抽取2到5个随机数字。

我最大的问题是正则表达式,休息很容易:)

我需要我的正则表达式搜索以下群组:

  • [d]
  • [d:3](结肠后必须是数字),
  • [d:2-5](两个数字用短划线分隔)

欢迎任何有关改进的建议!

1 个答案:

答案 0 :(得分:1)

正则表达式的绝佳工具:http://www.ultrapico.com/Expresso.htm

这是我提出的表达式(带有命名的捕获组):

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

enter image description here