2010-03-13 9 views
64

¿Es posible hacer una coincidencia insensible a mayúsculas y minúsculas en C# utilizando la clase Regex sin configurar el indicador RegexOptions.IgnoreCase?Regex insensible a mayúsculas/minúsculas sin utilizar la enumeración RegexOptions

Lo que me gustaría hacer es dentro de la expresión regular definir si quiero o no que la operación de coincidencia se haga de una manera que no distinga entre mayúsculas y minúsculas.

Me gustaría que esta expresión regular, taylor, para que coincida con los siguientes valores:

  • Taylor
  • Taylor
  • Taylor

Respuesta

93

MSDN Documentation

(?i)taylor partidos todos de las entradas que s pecificado sin tener que establecer el indicador RegexOptions.IgnoreCase.

Para forzar la sensibilidad de mayúsculas, puedo hacer (?-i)taylor.

Parece que otras opciones incluyen:

  • i, caso del modo insensible
  • s, una sola línea
  • m, el modo multi línea
  • x, el modo de separación libre
+0

¿Cómo puedo añadir esto a una expresión como esta: public const string Url = @ "^ (? :(?: https? | ftp): \/\ /) (?: \ S + (? :: \ S *)? @)? (? :(?! (?: 10 | 127) (?: \. \ D {1,3}) {3}) (?! (?: 169 \ .254 | 192 \ .168) (?: \. \ D { 1,3}) {2}) (?! 172 \. (?: 1 [6-9] | 2 \ d | 3 [0-1]) (?: \. \ D {1,3}) { 2}) (?: [1-9] \ d?| 1 \ d \ d | 2 [01] \ d | 22 [0-3]) (?: \. (?: 1? \ D {1,2} | 2 [0-4] \ d | 25 [ 0-5])) {2} (?: \. (?: [1-9] \ d? | 1 \ d \ d | 2 [0-4] \ d | 25 [0-4])) | (?: (?: [az \ u00a1- \ uffff0-9] - *) * [az \ u00a1- \ uffff0-9] +) (?: \. (?: [az \ u00a1- \ uffff0-9] - *) * [az \ u00a1- \ uffff0-9] +) * (?: \. (?: [az \ u00a1- \ uffff] {2,})) \.?) (? :: \ d { 2,5})?? (?: [/? #] \ S *)? $ "; – Yovav

24

Como dice spoon16, es (?i). MSDN tiene una lista de regular expression options que incluye un ejemplo del uso de mayúsculas y minúsculas a juego por sólo parte de un partido:

string pattern = @"\b(?i:t)he\w*\b"; 

Aquí la "t" se corresponde mayúsculas y minúsculas, pero el resto es sensible a mayúsculas . Si no especifica una subexpresión, la opción se establece para el resto del grupo adjunto.

Así, por tu ejemplo, usted podría tener:

string pattern = @"My name is (?i:taylor)."; 

Esto coincide con "Mi nombre es Taylor", pero no "MI NOMBRE ES taylor".

47

Como ya descubrió, (?i) es el equivalente en línea de RegexOptions.IgnoreCase.

Para su información, hay algunos trucos que puede hacer con él:

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' 

Y puede incluso combinar las banderas de esta manera: a(?mi-s)bc significado:

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' 
Cuestiones relacionadas