我想知道 Regex 是否有任何方法可以接受与给定字符集相关的字符,同时否定其他几个字符?
例如,考虑我想要接受\w
除 lettere
和 digit之外的所有字符、数字和下划线 () 的情况1
。有没有一种快速的方法可以做到这一点?理想情况下,我会喜欢类似于 的东西^[\w^e1]$
,尽管我知道这个特定的东西行不通。
您可以通过字符类减法来实现这一点:
[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);
}
比 Ahmad 的解决方案更便携但不太简洁的方法是只定义一个排除e
and的字符类1
。
[a-df-zA-DF-Z02-9]
应该按预期工作。