我是正则表达式的新手,出于学习目的,我正在编写一个单词查找程序。它需要一个字符池,当我按下“查找”按钮时,它会列出该字符集中所有可能的单词。在单词列表中循环,程序将每个单词与正则表达式模式进行比较。
在里面,我写了一个简单的模式来让它工作。例如:
^[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/