正则表达式:不匹配单词列表

时间:2011-06-08 09:57:15

标签: c# regex

我希望将正则表达式应用于输入字符串,以确保它与预定义值列表不匹配。例如,如果我传入单词Dog,我不希望它匹配。同样对于猫。但是,如果我通过绵羊,它应该匹配。 我试过了:

^(?!(Dog)|(Cat))$ << Doesn’t match Dog, Cat or sheep!
^((?!Dog)|(?!Cat))$ << Doesn’t match Dog, Cat or sheep!
^(?!Dog|Cat)$ << Doesn’t match Dog, Cat or sheep!
^(?!Dog)|(?!Cat)$ << matches everything because Dog != Cat for example

基本上,如果我传入“狗”,它应该匹配为狗!=狗。但是,如果我准确地传入狗或猫,那么它应该不匹配。

我觉得这很容易,但我正在把头发拉出来! 感谢

2 个答案:

答案 0 :(得分:8)

前瞻断言与任何东西都不匹配。关闭后你需要匹配字符,所以试试吧。

^(?!.*Dog)(?!.*cat).*$

here at Regexr

他们被描述为here in detail on msdn

如果您想要完全匹配这些单词,请使用像这样的单词边界

^(?!.*\bDog\b)(?!.*\bCat\b).*$

Regexr

\b确保

之前或之后没有单词字符

答案 1 :(得分:0)

假设(尽管勇敢地)我已经理解了这个问题,我相信这里的问题在于使用零宽度表达式,以及您希望搜索的字符串的区分大小写。

我认为您需要的内容如下所示。

void Main()
{
    string test = "sheep";

    var regEx = new Regex("^([dD][oO][gG]|[cC][aA][tT])$");

    Console.WriteLine(regEx.IsMatch(test) ? "Found" : "Not Found");
}

或者,您可以在没有正则表达式的情况下执行此操作,如下所示

void Main()
{
    List<string> excludeStrings = new List<string> { "dog", "cat" };

    string inputString = "Dog";

    Console.WriteLine(excludeStrings.Contains(inputString, StringComparer.CurrentCultureIgnoreCase) ? "Found" : "Not Found");
}