Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Regex.Escape (String)

 

Publicado: octubre de 2016

Convierte en caracteres de escape un juego mínimo de caracteres (\, *, +, ?, |, {, [, (,), ^, $,., # y espacio en blanco) al reemplazarlos con sus códigos de escape. Esto indica al motor de expresiones regulares que interprete los caracteres literalmente en lugar de como metacaracteres.

Espacio de nombres:   System.Text.RegularExpressions
Ensamblado:  System (en System.dll)

public static string Escape(
	string str
)

Parámetros

str
Type: System.String

La cadena de entrada que contiene el texto que se va a convertir.

Valor devuelto

Type: System.String

Cadena de caracteres con metacaracteres convertidos a su forma de escape.

Exception Condition
ArgumentNullException

El valor de str es null.

Escape Convierte una cadena para que el motor de expresiones regulares interprete los metacaracteres que pueda contener como literales de carácter. Por ejemplo, considere una expresión regular que está diseñada para extraer comentarios que están delimitados por rectas de apertura y cierre entre corchetes ([y]) del texto. En el ejemplo siguiente, la expresión regular "[(.*?)]" se interpreta como una clase de caracteres. En lugar de coincidencia comentarios incrustados en el texto de entrada, la expresión regular coincide con cada apertura o un paréntesis de cierre, un período, un asterisco o un signo de interrogación.

string pattern = "[(.*?)]"; 
string input = "The animal [what kind?] was visible [by whom?] from the window.";

MatchCollection matches = Regex.Matches(input, pattern);
int commentNumber = 0;
Console.WriteLine("{0} produces the following matches:", pattern);
foreach (Match match in matches)
   Console.WriteLine("   {0}: {1}", ++commentNumber, match.Value);  

// This example displays the following output:
//       [(.*?)] produces the following matches:
//          1: ?
//          2: ?
//          3: .

Sin embargo, si el corchete de apertura escape pasándolo a la Escape (método), la expresión regular logra encontrar coincidencias con los comentarios que se incrustan en la cadena de entrada. Esto se ilustra en el siguiente ejemplo:

string pattern = Regex.Escape("[") + "(.*?)]"; 
string input = "The animal [what kind?] was visible [by whom?] from the window.";

MatchCollection matches = Regex.Matches(input, pattern);
int commentNumber = 0;
Console.WriteLine("{0} produces the following matches:", pattern);
foreach (Match match in matches)
   Console.WriteLine("   {0}: {1}", ++commentNumber, match.Value);  

// This example displays the following output:
//       \[(.*?)] produces the following matches:
//          1: [what kind?]
//          2: [by whom?]

En una expresión regular que se define utilizando el texto estático, se pueden escapar caracteres que deben interpretarse literalmente en lugar de como metacaracteres delante de ellas con un símbolo de barra diagonal inversa (\), así como llamar a la Escape (método). En una expresión regular que se define dinámicamente, utilizando caracteres que no se conocen en tiempo de diseño, llamar a la Escape método es especialmente importante para asegurarse de que el motor de expresiones regulares interpreta los caracteres individuales como literales en lugar de como metacaracteres.

System_CAPS_noteNota

Si un patrón de expresión regular incluye el signo de número (#) o caracteres de espacio en blanco literales, deben convertirse si se analiza el texto de entrada con el RegexOptions.IgnorePatternWhitespace opción habilitada.

Mientras el Escape método convierte el recto abra corchete ([]) y caracteres de llave ({}), no escape los caracteres de cierre correspondientes (] {y}). En la mayoría de los casos, estos caracteres de escape no son necesario. Si un corchete o llave no está precedida por el carácter de apertura correspondiente, el motor de expresiones regulares lo interpreta literalmente. Si una llave o soporte de apertura se interpreta como un metacarácter, el motor de expresiones regulares interpreta el carácter como un metacarácter de cierre primera correspondiente. Si no es el comportamiento deseado, el corchete de cierre o la llave debe ser de escape anteponiendo explícitamente el carácter de barra diagonal inversa (\). Para ver una ilustración, vea la sección ejemplo.

En el ejemplo siguiente se extrae los comentarios del texto. Se supone que los comentarios se delimitan mediante un símbolo de comentario begin y un símbolo de comentario final seleccionado por el usuario. Dado que los símbolos de comentario son debe interpretarse literalmente, se pasan a la Escape método para asegurarse de que no puede interpretarse como metacaracteres. Además, el ejemplo comprueba explícitamente si el símbolo de comentario final especificado por el usuario es un corchete de cierre (]) o una llave (}). Si es así, un carácter de barra diagonal inversa (\) se antepone al corchete o llave para que se interpreta literalmente. Tenga en cuenta que el ejemplo también utiliza el Match.Groups colección para mostrar solo el comentario, en lugar del comentario junto con sus símbolos de comentario de apertura y cierre.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      ConsoleKeyInfo keyEntered;
      char beginComment, endComment;
      Console.Write("Enter begin comment symbol: ");
      keyEntered = Console.ReadKey();
      beginComment = keyEntered.KeyChar;
      Console.WriteLine();

      Console.Write("Enter end comment symbol: ");
      keyEntered = Console.ReadKey();
      endComment = keyEntered.KeyChar;
      Console.WriteLine();

      string input = "Text [comment comment comment] more text [comment]";
      string pattern;
      pattern = Regex.Escape(beginComment.ToString()) + @"(.*?)";
      string endPattern = Regex.Escape(endComment.ToString());
      if (endComment == ']' || endComment == '}') endPattern = @"\" + endPattern;
      pattern += endPattern;
      MatchCollection matches = Regex.Matches(input, pattern);
      Console.WriteLine(pattern);
      int commentNumber = 0;
      foreach (Match match in matches)
         Console.WriteLine("{0}: {1}", ++commentNumber, match.Groups[1].Value);

   }
}
// The example shows possible output from the example:
//       Enter begin comment symbol: [
//       Enter end comment symbol: ]
//       \[(.*?)\]
//       1: comment comment comment
//       2: comment

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: