如何使用内联修饰符代替 RegexOptions.Option
?
例如:
Regex MyRegex = new Regex(@"[a-z]+", RegexOptions.IgnoreCase);
如何使用内联字符 i
重写它?
最佳答案
您可以按如下方式使用内联修饰符:
// case insensitive match
Regex MyRegex = new Regex(@"(?i)[a-z]+"); // case insensitive match
或者,通过添加减号来反转修饰符的含义:
// case sensitive match
Regex MyRegex = new Regex(@"(?-i)[a-z]+"); // case sensitive match
或者,打开和关闭它们:
// case sensitive, then case-insensitive match
Regex MyRegex = new Regex(@"(?-i)[a-z]+(?i)[k-n]+");
或者,您可以使用 mode-modifier span 语法,使用冒号 :
和分组括号,将修饰符的范围限定为该组:
// case sensitive, then case-insensitive match
Regex MyRegex = new Regex(@"(?-i:[a-z]+)(?i:[k-n]+)");
您可以像这样一次性使用多个修饰符 (?is-m:text)
,或者如果您发现更清晰的 (?i)(?s)( ?-m)text
(我不知道)。当您使用开/关切换语法时,请注意修饰符一直有效到下一个开关或正则表达式结束。相反,使用模式修改的跨度,在跨度之后将应用默认行为。
最后:the allowed modifiers in .NET are (使用减号反转模式):
x
允许空格和注释
s
单行模式
m
多行模式
i
不区分大小写
n
仅允许显式捕获(特定于 .NET)
关于c# - 如何在 C# 正则表达式中使用内联修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542042/