排除正则表达式中的匹配项

本文关键字:正则表达式 排除 | 更新日期: 2023-09-27 18:23:59

是否可以忽略正则表达式中的特定匹配?

例如:

我有以下正则表达式:

^[0-9]{2}$

但我不想匹配特定的字符串,比如说"12"。

我想我正在为正则表达式寻找类似运算符的东西,但在.NET/C#中找不到这样的东西。

我更愿意在正则表达式本身中执行此操作。有什么建议吗?

排除正则表达式中的匹配项

^[0-9]{2}(?<!12)$

或者相反:

^(?!12)[0-9]{2}$

请注意,在这种特定的情况下,否定1个特定匹配很容易。有时不是,有时(几乎)不可能,取决于正则表达式。

您可以使用这个丑陋的正则表达式:

^([02-9][0-9] | [1][013-9])$

翻译成通俗英语,意思是"不以1开头的两位字符串,或以1开头但第二位没有2的两位数字符串"。

你最好做这样的事情:

if (Regex.IsMatch(MyString, @"^[0-9]{2}$") && MyString != "12")
{
    // Do something
}

Regex非常强大,但重要的是要知道何时不使用它们:)