Escapes de carácter en expresiones regulares

 

La barra diagonal inversa (\) en una expresión regular indica una de las siguientes situaciones:

  • El carácter que va detrás de ella es un carácter especial, como se muestra en la tabla de la sección siguiente. Por ejemplo, \b es un delimitador que indica que una coincidencia de expresión regular debería comenzar en un límite de palabras, \t representa un carácter de tabulación y \x020 representa un espacio.

  • Un carácter que de otro modo se interpretaría como una construcción de lenguaje sin escape, se debe interpretar literalmente. Por ejemplo, una llave ({) inicia la definición de un cuantificador, pero una barra diagonal inversa seguida de una llave (\{) indica que el motor de expresiones regulares debería coincidir con la llave. De igual forma, una sola barra diagonal inversa marca el principio de una construcción de lenguaje con escape, pero dos barras diagonales inversas (\\) indican que el motor de expresiones regulares debería coincidir con la barra diagonal inversa.

System_CAPS_ICON_note.jpg Nota

Los escapes de caracteres se reconocen en los patrones de expresiones regulares, pero no en los patrones de reemplazo.

En la tabla siguiente se enumeran los escapes de caracteres admitidos en las expresiones regulares de .NET Framework.

Carácter o secuenciaDescripción
Todos los caracteres excepto los siguientes:

. $ ^ { [ ( | ) * + ? \
Los caracteres que no aparecen en la columna Carácter o secuencia no tienen ningún significado especial en las expresiones regulares, sino que equivalen a sí mismos.

Los caracteres incluidos en la columna Carácter o secuencia son elementos del lenguaje especial de expresiones regulares. Para que coincidan con ellos en una expresión regular, deben escribirse entre secuencias de escape o incluirse en un grupo de caracteres ppositive. Por ejemplo, las expresiones regulares \$\d+ o [$]\d+ coinciden con "$1200".
\aCoincide con un carácter de campana (alarma), \u0007.
\bEn una clase de caracteres [grupo_caracteres], coincide con un retroceso, \u0008. (Consulte Clases de carácter). Fuera de una clase de caracteres, \b es un delimitador que coincide con un límite de palabras. (Consulte Delimitadores).
\tCoincide con un carácter de tabulación, \u0009.
\rCoincide con un retorno de carro, \u000D. Observe que \r no es equivalente al carácter de nueva línea, \n.
\vCoincide con una tabulación vertical, \u000B.
\fCoincide con un avance de página, \u000C.
\nCoincide con una nueva línea, \u000A.
\eCoincide con un escape, \u001B.
\ nnnCoincide con un carácter ASCII, donde nnn está compuesto de dos o tres dígitos que representan el código de carácter octal. Por ejemplo, \040 representa un carácter de espacio. Esta construcción se interpreta como una referencia inversa si tiene un solo dígito (por ejemplo, \2) o si se corresponde con el número de un grupo de captura. (Consulte Construcciones de referencia inversa).
\x nnCoincide con un carácter ASCII, donde nn es un código de carácter hexadecimal de dos dígitos.
\c XCoincide con un carácter de control ASCII, donde X es la letra del carácter de control. Por ejemplo, \cC es CTRL-C.
\u nnnnCoincide con una unidad de código UTF-16 cuyo valor hexadecimal es nnnn. Note: .NET Framework no admite el escape de caracteres de Perl 5 utilizado para especificar Unicode. El escape de caracteres de Perl 5 tiene el formato \x{####…}, donde #### es una serie de dígitos hexadecimales. En su lugar, use \unnnn.
\Si va seguido de un carácter que no se reconoce como carácter de escape, coincide con ese carácter. Por ejemplo, \* coincide con un asterisco (*) y es igual que \x2A.

En el ejemplo siguiente se muestra el uso de escapes de carácter en una expresión regular. Analiza una cadena que contiene los nombres de las ciudades más grandes del mundo y sus poblaciones en 2009. Cada nombre de ciudad se separa de su población por un carácter de tabulación (\t) o una barra vertical (| o \u007c). Cada ciudad y su población está separada de la siguiente por un retorno de carro y un avance de línea.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string delimited = @"\G(.+)[\t\u007c](.+)\r?\n";
      string input = "Mumbai, India|13,922,125\t\n" + 
                            "Shanghai, China\t13,831,900\n" + 
                            "Karachi, Pakistan|12,991,000\n" + 
                            "Delhi, India\t12,259,230\n" + 
                            "Istanbul, Turkey|11,372,613\n";
      Console.WriteLine("Population of the World's Largest Cities, 2009");
      Console.WriteLine();
      Console.WriteLine("{0,-20} {1,10}", "City", "Population");
      Console.WriteLine();
      foreach (Match match in Regex.Matches(input, delimited))
         Console.WriteLine("{0,-20} {1,10}", match.Groups[1].Value, 
                                            match.Groups[2].Value);
   }
}
// The example displyas the following output:
//       Population of the World's Largest Cities, 2009
//       
//       City                 Population
//       
//       Mumbai, India        13,922,125
//       Shanghai, China      13,831,900
//       Karachi, Pakistan    12,991,000
//       Delhi, India         12,259,230
//       Istanbul, Turkey     11,372,613

La expresión regular \G(.+)[\t|\u007c](.+)\r?\n se interpreta como se muestra en la tabla siguiente.

ModeloDescripción
\GComienza la búsqueda de coincidencias donde finalizó la última coincidencia.
(.+)Buscar cualquier carácter coincidente una o más veces. Este es el primer grupo de captura.
[\t\u007c]Coincide con un carácter de tabulación (\t) o una barra vertical (|).
(.+)Buscar cualquier carácter coincidente una o más veces. Este es el segundo grupo de captura.
\r? \nCoincide con cero o un retorno de carro seguido de una nueva línea.

Lenguaje de expresiones regulares - Referencia rápida

Mostrar: