我希望将正则表达式应用于输入字符串,以确保它与预定义值列表不匹配。例如,如果我传入单词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
基本上,如果我传入“狗”,它应该匹配为狗!=狗。但是,如果我准确地传入狗或猫,那么它应该不匹配。
我觉得这很容易,但我正在把头发拉出来! 感谢
答案 0 :(得分:8)
前瞻断言与任何东西都不匹配。关闭后你需要匹配字符,所以试试吧。
^(?!.*Dog)(?!.*cat).*$
他们被描述为here in detail on msdn
如果您想要完全匹配这些单词,请使用像这样的单词边界
^(?!.*\bDog\b)(?!.*\bCat\b).*$
\b
确保
答案 1 :(得分: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");
}