Регулярное выражение без учета регистра без использования перечисления RegexOptions



можно ли сделать совпадение без учета регистра в C# с помощью класса Regex без установки регулярных выражений.Невежественный флаг?



то, что я хотел бы иметь возможность сделать, - это в самом регулярном выражении определить, хочу ли я, чтобы операция сопоставления выполнялась без учета регистра.



Я хотел бы это регулярное выражение,taylor, чтобы соответствовать следующим значениям:




  • Тейлор

  • Тейлор

  • Тейлор

544   3  

3 ответов:

Примечание

(?i)taylor соответствует всем входам, которые я указал, без необходимости устанавливать регулярные выражения.Флаг невежества.

чтобы заставить чувствительность к регистру я могу сделать (?-i)taylor.

похоже, что другие варианты включают в себя:

  • i регистр
  • s, одиночный режим строку
  • m, режим multi line
  • x бесплатный интервал режим

как вы уже выяснили, (?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

    Ничего не найдено.