Regex:与单词列表不匹配

本文关键字:列表 不匹配 单词 Regex | 更新日期: 2023-09-27 17:58:43

我希望将正则表达式应用于输入字符串,以确保它与预定义值列表不匹配。例如,如果我输入单词Dog,我不希望它匹配。Cat也是如此。然而,如果我通过绵羊,它应该匹配。我试过:

^(?!(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!=狗。但如果我完全是狗或猫,那么它就不应该匹配。

我原以为这真的很容易,但我要拔头发了!感谢

Regex:与单词列表不匹配

前瞻断言与任何内容都不匹配。关闭后,你需要匹配字符,所以尝试例如

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

在Regexr 上查看

它们在msdn 上有详细描述

如果你想准确匹配这些单词,那么就使用像这样的单词边界

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

Regexr

'b确保之前或之后没有字字符

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

我想你需要的东西列在下面。

void Main()
{
    string test = "sheep";
    var regEx = new Regex("^([dD][oO][gG]|[cC][aA][tT])$");
    Console.WriteLine(regEx.IsMatch(test) ? "Found" : "Not Found");
}

或者,您可以在不使用regex的情况下执行此操作,如下所示

void Main()
{
    List<string> excludeStrings = new List<string> { "dog", "cat" };
    string inputString = "Dog";
    Console.WriteLine(excludeStrings.Contains(inputString, StringComparer.CurrentCultureIgnoreCase) ? "Found" : "Not Found");
}