字符类和正则表达式的否定

时间:2013-03-05 00:23:53

标签: c# regex

我想知道Regex是否有办法接受与给定字符集关联的字符,而忽略了其他几个字符?

例如,考虑我希望接受除字母\w和数字e之外的所有字符,数字和下划线(1)的情况。有没有快速的方法来实现这一目标?理想情况下,我喜欢类似于^[\w^e1]$的东西,虽然我知道这个特定的东西不起作用。

2 个答案:

答案 0 :(得分:6)

您可以通过character class subtraction

来实现这一目标
  

[base_group - [excluded_group]]

使用此格式,模式^[\w-[e1]]$可用于匹配除字母e和数字1之外的所有字母数字字符。

string[] inputs = 
{
    "a", "b", "c", "_", "2", "3",
    " ", "1", "e"   // false cases
};
string pattern = @"^[\w-[e1]]$";
foreach (var input in inputs)
{
    Console.WriteLine("{0}: {1}", Regex.IsMatch(input, pattern), input);
}

答案 1 :(得分:0)

更多便携式,但不如Ahmad的解决方案简洁明确的方法是定义一个排除e1的字符类。

[a-df-zA-DF-Z02-9]

应该按预期工作。