簡體   English   中英

正則表達式:不匹配單詞列表

[英]Regex: Not matching a list of words

我希望將正則表達式應用於輸入字符串,以確保它與預定義值列表不匹配。 例如,如果我傳入單詞 Dog,我不希望它匹配。 對於貓也是如此。 但是,如果我通過 Sheep,它應該匹配。 我試過了:

^(?!(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

基本上,如果我傳入“Dogs”,它應該匹配為 dog.= dogs。 但是,如果我准確地傳遞了狗或貓,那么它不應該匹配。

我認為這真的很容易,但我正在拔頭發! 謝謝

前瞻斷言不匹配任何內容。 關閉它后,您需要匹配字符,因此請嘗試例如

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

在 Regexr 上查看

它們在 msdn 上有詳細描述

如果您想完全匹配這些單詞,請使用這樣的單詞邊界

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

正則表達式

\b確保之前或之后沒有單詞字符

假設(盡管勇敢地)我已經理解了這個問題,我相信這里的問題在於使用零寬度表達式,以及您要搜索的字符串的大小寫敏感性。

我認為您需要的內容如下所示。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM