正则表达式匹配短语中的单个单词

时间:2012-10-31 21:05:33

标签: c# regex

我正在使用正则表达式来执行网站搜索。 如果我搜索这个:“Millwood的别墅”(这是一个社区名称),相应的社区名称是“Millwood的别墅”,我得到了结果。

如果我搜索“Millwood villas”,则没有填充结果。

我的意思是,这个短语作为一个整体,并且匹配。有没有办法匹配输入短语中单个单词的任何出现?所以“millwood Villas”仍然会带来结果 “米尔伍德别墅”?

以下是我必须与社区名称匹配的内容:

Regex.IsMatch(MarketingCommunityName.Trim(), pattern, RegexOptions.IgnoreCase)

其中pattern是输入的搜索短语,MarketingCommunityName是实际的社区名称。

提前致谢!

3 个答案:

答案 0 :(得分:1)

虽然我认为你应该Split你的搜索模式在一个空格,然后分别检查每个单词,从你的搜索模式构建一个与顺序无关的正则表达式并不会太难:

var searchWords = searchString.Trim().Split(new Char[] {' '});

string pattern = @"^(?=.*" + String.Join(@")(?=.*", searchWords) + ")";

这构造了一个正则表达式,每个搜索词包含一个先行断言。每个前瞻断言都从字符串的开头开始,查看搜索词是否显示在字符串内的任何位置。请注意,如果searchString包含正则表达式元字符,则可能会出现问题,因此这些元素应该事先进行转义。

答案 1 :(得分:0)

找到两种模式的正则表达式模式将是

\bMillwood\b.*\bvillas\b

其中\b表示单词的开头或结尾,.*表示任意数量的字符。

我不介意找到部分字词,你可以放弃\b

Millwood.*villas

但是你不会找到"villas of Millwood"。这种模式

Millwood.*villas|villas.*Millwood

但是如果你想将这个搜索扩展到由三个以上单词组成的模式,正则表达式不是实现这种模糊逻辑的正确选择。我会计算不同的加工单词的数量,并返回产生最小计数的短语。 (可能至少有60%的给定单词。)

答案 2 :(得分:0)

拆分短语并检查每个单词

pattern.Split(' ')
    .All(word=>Regex.IsMatch(MarketingCommunityName.Trim(), word, RegexOptions.IgnoreCase)