如何在.NET正则表达式中进行完全字符串的精确匹配排除?

5

我需要一个.NET正则表达式,匹配除了指定的完全字符串匹配之外的任何内容。基本上是这样的:

^Index$

...是我关心的唯一例外。字符串可以以"Index"开头、结尾或包含它,但不完全匹配。

答案必须通过模式本身得出,因为我正在向第三方库传递参数,并且除了通过Regex模式之外,我无法控制该过程。


你能提供更多信息吗?比如,为什么要使用正则表达式?你可以通过 myString != "Index" 的比较来更简单地实现这个功能,这样就不必担心正则表达式了。 - alastairs
我必须向接受正则表达式以匹配其他内容的某个东西传递参数。除了“根据此正则表达式匹配或不匹配”之外,我无法控制该事物的工作方式。 - Nathan Ridley
4个回答

5
这应该能解决问题:
^(?!Index$)

是的,这样做更好。现在想起来很明显! - Nathan Ridley

4

如果需要使用正则表达式,

Match match = Regex.Match(input, @"^Index$");

if (!match.Success){
    // Do something
}

并且以一种可怕的方式

Match match = Regex.Match(input, @"^(.*(?<!Index)|(?!Index).*)$");

if (match.Success){
    // Do something
}

注意:第二个示例未经过测试,正则表达式引擎需要支持完全的前瞻和后顾。


有一种比第二种更简单、更快的方法,可以看看我的答案。 - Lucero

0
使用if (!r.Match("^Index$").Success) ...

不,它必须采用正则表达式语法。我在这里所做的唯一控制是通过模式本身实现的。 - Nathan Ridley

0
您可以检查 !regex.Match.Success

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