- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
十小时前关门了。
Improve this question
我正在寻找一个RegExp,它检查是否有2个或更多的单词出现在一个字符串中,而不管它们的顺序。
如果我想找到单词"dog"和"cat",表达式必须只在它们都在句子中时才能找到匹配项:
"我喜欢狗"-不匹配
"我爱猫"-不匹配
"我有一只狗和一只猫"-好的
我找到的唯一真正的解决方案是循环单词,将它们作为模式传递给Regex.IsMatch,但我希望在这种情况下有更好的方法使用regex。
代码:
string[] patterns = RefinedQuery.Split(" ");
bool checkPatterns(string test, string[] ps, int i)
{
if(i > ps.Length - 1)
{
return true;
}
return Regex.IsMatch(test, ps[i], RegexOptions.IgnoreCase) && checkPatterns(test, ps, i+1);
}
return workers.Where(delegate(WorkerExpanded worker)
{
string fullname = worker.ToDisplayString();
return checkPatterns(fullname, patterns, 0);
});
我不想循环单词列表并使用regex.isMatch或string.contains,而是想找到一个更有效的解决方案。
2条答案
按热度按时间wgmfuz8q1#
本例中的正则表达式模式将匹配句子中的"dog"和"cat"。它通过使用
|
运算符的交替来实现这一点,该运算符允许"dog"或"cat"出现在第一个和第二个位置。这意味着该模式将匹配诸如"I own a dog and a cat"和"I own a cat and a dog"之类的句子。演示:https://dotnetfiddle.net/pU2HhD
实施:
输出:
使用
List
个单词的备选答案:Regex.Escape
方法用于对单词中的任何特殊字符进行转义,以便将它们视为正则表达式中的原义字符。\b
转义序列用于匹配单词边界,从而确保将单词作为完整的单词进行匹配,而不是作为其他单词的子字符串进行匹配。演示:https://dotnetfiddle.net/9djbw1
输出:
vsnjm48y2#
这个应该可以了。
.*(dog).*(cat)
第一部分检查字符串是否在“cat”之前包含“dog”.*(cat).*(dog).*
第二部分检查字符串是否在“dog”之前包含“cat”|
是用于OR的逻辑运算符^
和$
是锚点,与起点和终点匹配