c# - 正则表达式允许一组重复不同时间的字符

标签 c# regex

我是正则表达式的新手,出于学习目的,我正在编写一个单词查找程序。它需要一个字符池,当我按下“查找”按钮时,它会列出该字符集中所有可能的单词。在单词列表中循环,程序将每个单词与正则表达式模式进行比较。

在里面,我写了一个简单的模式来让它工作。例如:

^[mase]+$

但它不能正常工作。


简要说明和我试图实现的目标,下面是一个示例:

如果字符池是 ahbbhhh,那么我想匹配至少包含一个 a、h 或 b 并且最多包含 1 个 a、4 个 h 和 2 个 b 的单词。它不应包含任何其他字符。

最佳答案

我认为 RegEx 不会支持这一点。 然而,它是对任何编程语言的简单测试。 这是 C# 上的示例:

private Dictionary<char, int> WordToChars(string word)
{
    var result = new Dictionary<char, int>();
    foreach (var c in word)
    {
        if (result.ContainsKey(c))
        {
            result[c] += result[c] + 1;
        }
        else
        {
            result[c] = 1;
        }
    }

    return result;
}

private bool DoesMatchPattern(string patternString, string testString)
{
    var pattern = WordToChars(patternString);
    var test = WordToChars(testString);

    return test.All(x => pattern.TryGetValue(x.Key, out int qty) && qty >= x.Value);
}

简而言之:WordToChar() 将任何字符串转换为具有重复数量的字符。 DoesMatchPattern() 比较测试字符串只有模式字符串中的字符,并且对应的重复数量小于或等于模式。

关于c# - 正则表达式允许一组重复不同时间的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57662906/

相关文章:

c# - 中继命令可以执行和任务

c# - 我的循环选择列表中的 MVC 3 Controller 语法错误

c# - 使用 Windows 窗体移植旧的 Flash 游戏 - 如何嵌入 Flash Player dll?

regex - 如何替换文件中的版本号?

javascript - 如何获取字符串变量中具有特定类名的所有范围

c# - 如何查找没有特定编号的多行

c# - 在远程计算机中将服务启动类型更改为延迟(自动)

c# - asp.net GridView CheckBox 不可点击

javascript - 正则表达式以嵌套可排序形式更新表单输入多个索引

python - 存储 Python RegEx 多个组