不区分大小写正则expression式,不使用RegexOptions枚举
是否有可能在C#中使用Regex类而不设置RegexOptions.IgnoreCase标志在不区分大小写的匹配?
我希望能够做的是在正则expression式中定义我是否希望匹配操作以不区分大小写的方式完成。
我希望这个正则expression式taylor
匹配下列值:
- 泰勒
- 泰勒
- 泰勒
MSDN文档
(?i)taylor
匹配我指定的所有input,而不必设置RegexOptions.IgnoreCase标志。
为了强制区分大小写,我可以做(?-i)taylor
。
它看起来像其他选项包括:
-
i
,不区分大小写 -
s
,单线模式 -
m
,多线模式 -
x
,自由间距模式
正如你已经发现的那样, (?i)
是RegexOptions.IgnoreCase
的在线等价RegexOptions.IgnoreCase
。
只是供参考,你可以用它做一些技巧:
Regex: a(?i)bc Matches: a # match the character 'a' (?i) # enable case insensitive matching b # match the character 'b' or 'B' c # match the character 'c' or 'C' Regex: a(?i)b(?-i)c Matches: a # match the character 'a' (?i) # enable case insensitive matching b # match the character 'b' or 'B' (?-i) # disable case insensitive matching c # match the character 'c' Regex: a(?i:b)c Matches: a # match the character 'a' (?i: # start non-capture group 1 and enable case insensitive matching b # match the character 'b' or 'B' ) # end non-capture group 1 c # match the character 'c'
而且你甚至可以把这样的标志结合起来: a(?mi-s)bc
意思是:
a # match the character 'a' (?mi-s) # enable multi-line option, case insensitive matching and disable dot-all option b # match the character 'b' or 'B' c # match the character 'c' or 'C'
正如spoon16所说,它是(?i)
。 MSDN有一个正则expression式选项列表,其中包括一个使用不区分大小写匹配匹配部分匹配的例子:
string pattern = @"\b(?i:t)he\w*\b";
这里“t”是不区分大小写的,但其余的区分大小写。 如果不指定子expression式,则为封闭组的其余部分设置该选项。
所以对于你的例子,你可以有:
string pattern = @"My name is (?i:taylor).";
这将匹配“我的名字是泰勒”,而不是“我的名字是泰勒”。