2011-06-08 109 views
1

我正在寻找将正则表达式应用于输入字符串以确保它与预定义值列表不匹配。例如,如果我传递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 

基本上,如果我通过在“狗”,它应作为匹配狗=狗!但是,如果我传入完全狗或猫,那么它不应该匹配。

我以为这会很容易,但我正在打发我的头发! 谢谢

回答

8

向前看断言不匹配任何东西。关闭后你需要匹配字符,所以请尝试

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

看到它here at Regexr

他们被描述here in detail on msdn

如果你想完全匹配的那些话,然后用字边界这样

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

Regexr

\b确保在之前或之后没有字符字符

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"); 
} 
+1

有一个叫伟大的事情做没有正规表达式“IGNORECASE”修饰符见[这里MSDN(http://msdn.microsoft.com/ en-us/library/04xx80ds.aspx),这使得正则表达式不区分大小写 – stema 2011-06-08 10:40:39