我正在使用正则表达式执行站点搜索。 如果我搜索这个:“Villas at Millwood”(这是一个社区名称)并且相应的社区名称是“Villas at Millwood”,我会得到结果。
如果我搜索“Millwood villas”,则不会显示任何结果。
我的意思是,该短语被视为一个整体,并进行了匹配。有什么方法可以匹配输入的短语中出现的单个单词吗?这样“millwood Villas”仍然会带来这样的结果 “米尔伍德别墅”?
这是我必须匹配社区名称的内容:
Regex.IsMatch(MarketingCommunityName.Trim(), pattern, RegexOptions.IgnoreCase)
其中 pattern 是输入的搜索短语,MarketingCommunityName 是实际的社区名称。
提前致谢!
最佳答案
虽然我认为您应该在一个空格处拆分
您的搜索模式,然后分别检查每个单词,但从您的搜索模式构造一个与顺序无关的正则表达式并不会太难:
var searchWords = searchString.Trim().Split(new Char[] {' '});
string pattern = @"^(?=.*" + String.Join(@")(?=.*", searchWords) + ")";
这构建了一个正则表达式,每个搜索词包含一个先行断言。每个先行断言都从字符串的开头开始,并查看搜索词是否出现在字符串内的任何位置。请注意,如果您的 searchString
包含正则表达式元字符,您可能会遇到问题,因此应该事先对这些元字符进行转义。
关于c# - 用于匹配短语中单个单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167416/