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

标签 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](两个数字用破折号分隔)

欢迎提出任何改进建议!

最佳答案

非常棒的正则表达式工具:http://www.ultrapico.com/Expresso.htm

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

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

enter image description here

关于c# - 正则表达式 - 改进搜索并添加第三组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291297/

相关文章:

c# - 如何检查 C#.NET 3.5 中的对象是否为空?

php - 带有 preg_match_all 的 php 中的正则表达式

JavaScript + RegEx 复杂化——搜索不包含子字符串的字符串

javascript - 在 Jquery 中使用 Match 只返回一个值

c# - "TrimEnd()"的意外结果......结果随机太贪婪

c# - 将参数传递给 ICommand

c# - 隐藏 Windows 窗体后无法将其显示回来

c# - 字符缺失

c# - Where 返回 0 行时的 LINQ 查询空异常

.net - .NET 3.5 中超过 100 万个有序集合的推荐数据结构