Регулярное выражение без учета регистра без использования перечисления RegexOptions
можно ли сделать совпадение без учета регистра в C# с помощью класса Regex без установки регулярных выражений.Невежественный флаг?
то, что я хотел бы иметь возможность сделать, - это в самом регулярном выражении определить, хочу ли я, чтобы операция сопоставления выполнялась без учета регистра.
Я хотел бы это регулярное выражение,taylor, чтобы соответствовать следующим значениям:
- Тейлор
- Тейлор
- Тейлор
3 ответов:
(?i)taylorсоответствует всем входам, которые я указал, без необходимости устанавливать регулярные выражения.Флаг невежества.чтобы заставить чувствительность к регистру я могу сделать
(?-i)taylor.похоже, что другие варианты включают в себя:
iрегистрs, одиночный режим строкуm, режим multi linexбесплатный интервал режим
как вы уже выяснили,
(?i)- это встроенный эквивалентRegexOptions.IgnoreCase.просто FYI, есть несколько трюков, которые вы можете сделать с ним:
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 имеет список параметры регулярных выражений который включает в себя пример использования сопоставления без учета регистра только для часть игры:string pattern = @"\b(?i:t)he\w*\b";здесь "t"сопоставляется без учета регистра, но остальное чувствительно к регистру. Если вы не укажете подвыражение, этот параметр будет установлен для остальной части заключающей группы.
Так что для вашего примера, вы могли бы иметь:
string pattern = @"My name is (?i:taylor).";Это матч "Меня зовут Тейлор", но не"меня зовут Тейлор".
Comments