Úselo de esta manera:
Regex MyRegex = new Regex(@"(?i:[a-z]+)");
Prefijo la opción en línea para su patrón con (?<option>:<pattern>)
. En este caso, la opción es "i" para IgnoreCase.
Al especificar dos puntos encima, está configurando la opción solo para ese patrón. Para hacer que la opción se aplica a todo el patrón es posible configurarlo en un principio por su propia cuenta:
@"(?i)[a-z]+"
También es posible utilizar múltiples opciones y encenderlos y fuera:
// On: IgnoreCase, ExplicitCapture. Off: IgnorePatternWhitespace
@"(?in-x)[a-z]+"
Este permite flexibilidad en un patrón para habilitar/deshabilitar opciones en diferentes puntos de una expresión regular que no es posible cuando se usa RegexOptions
en todo el patrón.
Aquí hay un ejemplo un poco profundo.Te animo a que juegues con él para comprender cuándo las opciones surten efecto.
string input = "H2O (water) is named Dihydrogen Monoxide or Hydrogen Hydroxide. The H represents a hydrogen atom, and O is an Oxide atom.";
// n = explicit captures
// x = ignore pattern whitespace
// -i = remove ignorecase option
string pattern = @"di?(?nx-i) (hydrogen) | oxide";
var matches = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Total Matches: " + matches.Count);
foreach (Match match in matches)
{
Console.WriteLine("Match: {0} - Groups: {1}", match.Value, match.Groups[1].Captures.Count);
}
Console.WriteLine();
// n = explicit captures
// x = ignore pattern whitespace
// -i = remove ignorecase option
// -x = remove ignore pattern whitespace
pattern = @"di?(?nx-i) (?<H> hydrogen) (?-x)|oxide";
matches = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Total Matches: " + matches.Count);
foreach (Match match in matches)
{
Console.WriteLine("Match: {0} - Groups: {1}", match.Value, match.Groups["H"].Captures.Count);
}
La salida para el anterior es:
Total Matches: 3
Match: Dihydrogen - Groups: 0
Match: oxide - Groups: 0
Match: oxide - Groups: 0
Total Matches: 3
Match: Dihydrogen - Groups: 1
Match: oxide - Groups: 0
Match: oxide - Groups: 0
En ambos patrones RegexOptions.IgnoreCase
se utiliza lo que permite "di" para ser sensible a mayúsculas y por lo tanto coincidirá con "dihidrógeno" (capital D). Como la captura explícita está activada, el primer ejemplo no tiene ningún grupo para (hydrogen)
, ya que no usa un grupo con nombre, que es el requisito para la captura explícita. El segundo patrón tiene 1 grupo ya que usa (?<H> hydrogen)
.
A continuación, observe que el segundo patrón se modifica para usar (?-x)|oxide
al final. Como IgnorePatternWhitespace está desactivado después de la captura de hidrógeno, el resto del patrón debe formarse correctamente al no tener espacio en blanco adicional (compárelo con el primer patrón) hasta que (?x)
se active más adelante en el patrón. Esto no sirve para nada, pero solo muestra un uso profundo de las opciones en línea para demostrar cuándo se activan.
Gracias. Entonces, si quiero usar varios modificadores, simplemente hago '(? Imsx)' en lugar de '(? I)', por ejemplo. – Aillyn