需要c#regex将逗号列表中的任何单词与另一个字符串中的任何单词匹配

时间:2018-04-16 23:02:56

标签: c# regex list comma

我无法弄清楚这一点或找到已经回答的问题。我有一个以逗号分隔格式的关键字列表。我想在字符串中搜索逗号列表中任何单词的匹配项。有人可以帮忙吗?示例代码:

string searchString = "http://www.website.com/test/?q=cats and dogs"; 
string keywords = "cats, dogs, whales, fish";
bool match = Regex.IsMatch(searchString , "xxxx");  // Need the regex string here
Console.WriteLine(match)

输出:真(因为猫和狗都在引用字符串中找到

我似乎无法弄清楚这一点。请帮忙。

1 个答案:

答案 0 :(得分:1)

我不在我的电脑上,所以这不是袖手旁观,请记住我在关于规范化和处理CSV数据的风险的评论中的免责声明,但是......

var parts= keywords.Split(',').Select(x=>Regex.Escape(x.Trim()));
var pattern= "(" +string.Join("|" , parts) + ")";
var regex=new Regex(pattern);
bool match=regex.IsMatch(searchString);

你可能需要通过放置@" \ W"来强化(避免错误匹配)。在这样的模式字符串的开头和结尾......

var pattern= @"\W(" +string.Join("|" , parts) + @")\W";

为了迎合字符串开头和结尾的匹配,让它成为..

var pattern= @"(^|\W)(" +string.Join("|" , parts) + @")(\W|$)";

或者,感谢Johnbot:

var pattern= @"\b(" +string.Join("|" , parts) + @")\b";