什么正则表达机制匹配“滑雪”而不是“滑水”?

时间:2009-06-08 03:58:35

标签: regex

可以使用什么正则表达式机制来匹配“滑雪”而不是“滑水”?

或者,匹配“滑雪”而不是“滑雪促销”?

可以包含简短的解释吗?

更新:我的意思是,例如,它应该能够匹配“2009年滑雪比赛”,而不是“2009年滑水比赛”。

2 个答案:

答案 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");