2011-06-08 114 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

相關問題