是否有一个正则表达式可以在一个句子中找到两个不同的单词?在 MS Visual Studio 2008 中工作的表达式的额外功劳:)
例如:
reg_ex_match(A, B, "A sentence with A and B") = true
reg_ex_match(C, D, "A sentence with A and B") = false
另请参阅此相关问题
对于真实的话:
\bA\b.+\bB\b|\bB\b.+\bA\b
".*A.*B.*|.*B.*A.*" 如果需要正确的单词,可以在单词 A 和 B 周围添加空格。
以下正则表达式匹配整个字符串,仅当字符串包含所有单词时:all your words here
。您可以轻松添加其他单词或删除现有单词。
(?=.*?\ball\b)
(?=.*?\byour\b)
(?=.*?\bwords\b)
(?=.*?\bhere\b)
.*
没那么复杂。
为什么不使用布尔逻辑,而不是复杂的正则表达式?
代码未测试:
public bool reg_ex_match(Regex A, Regex B, string s) {
return A.isMatch(s) && B.isMatch(s);
}
更新:假设 A 和 B 是用字边界定义的:
Regex A = new Regex(@"\bA\b");
.*A.*\s.*B.*|.*B.*\s.*A.*
请注意在 A 和 B 之间使用“+”。这是为了确保您在单独的 A 和 B 上匹配。如果这不是必需的,那么 Łukasz Lew 的答案是正确的。
更新:根据下面 Bryan 的出色观察进行了更改。上面的表达式将识别 A 与 B 分开(反之亦然),在两个感兴趣区域之间至少有一个空白字符(空格、制表符或换行符)。
您正在寻找的正则表达式是这样的:
/word1.*(?=word2)|word2.*(?=word1)/igm
这也是不区分大小写的,可以应用于多行文本。
尝试搜索regexlib,一个正则表达式存储库。