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

5

我希望能对输入的字符串应用正则表达式,以确保它不匹配预定义值列表。例如,如果我传入单词Dog,我不想让它匹配。同样,对于Cat也是如此。但是,如果我传入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,则不应匹配。

我以为这很简单,但我正在拼命尝试!谢谢

2个回答

15

预查断言并不匹配任何内容。在结束后,你需要匹配字符,所以尝试使用:

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

在Regexr网站上可以查看详细信息

关于正则表达式,可以在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");
}

2
有一个很棒的东西叫做“ignoreCase”修饰符,可以使正则表达式不区分大小写。请参见这里的 MSDN 文档 - stema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接