可以使用什么正则表达式机制来匹配“滑雪”而不是“滑水”?
或者,匹配“滑雪”而不是“滑雪促销”?
可以包含简短的解释吗?
更新:我的意思是,例如,它应该能够匹配“2009年滑雪比赛”,而不是“2009年滑水比赛”。
答案 0 :(得分:11)
对于更新的部分,您需要使用负面的后视。像
这样的东西(?<!water\s*)(ski\b)
这应该与单词ski相匹配,其中water不是前一个单词。
编辑:我调整了上面的正则表达式,我的意思是负面的后视,而不是反向引用。对于滑雪和滑雪比赛,但不是滑雪销售,你需要负面的预测。 E.g:(\bski)(?!\s*sale)
有关更多解释,请参阅http://www.regular-expressions.info/lookaround.html。
答案 1 :(得分:0)
您可以随时进行多次通过搜索,首先从字符串中删除滑水和滑雪销售的所有实例,然后执行IsMatch。在C#中它看起来像这样。
string line = Console.ReadLine();
line = Regex.Replace(line, "water ski", "");
line = Regex.Replace("ski sale", "");
bool matchFound = line.IsMatch("ski");