regular - regex matches c#
Reemplace una barra invertida simple con una barra invertida doble (5)
Parece bastante simple, ¿verdad? Bueno, no lo sé.
Aquí está el código que estoy intentando:
input = Regex.Replace(input, "//", "//////");
Sin embargo, estoy recibiendo un error,
ArgumentException no se ha manejado - análisis "/" - Ilegal al final del patrón.
¿Cómo hago esto?
El primero debe ser "////"
, no "//"
. Funciona así:
- Has escrito
"//"
. - Esto se traduce a la secuencia
/
en una cadena. - El motor de expresiones regulares luego lee esto, que se traduce como barra diagonal inversa que no escapa a nada, por lo que produce un error.
Con expresiones regulares, es mucho más fácil usar una "cadena textual". En este caso, la cadena textual sería @"//"
. Al usar cadenas textuales, solo tiene que considerar escapar para el motor de expresiones regulares, ya que las barras invertidas se tratan literalmente. La segunda cadena también será @"//"
, ya que no será interpretada por el motor de expresiones regulares.
Sé que es demasiado tarde para ayudarte, tal vez alguien más se beneficiará de esto. De todos modos esto me funcionó:
text = text.Replace(@"/",@"//");
Y lo encuentro aún más simple.
¡Aclamaciones!
Si desea reemplazar una barra diagonal inversa por dos, podría ser más claro eliminar un nivel de escape en la expresión regular utilizando @"..."
como el formato para sus cadenas literales, también conocida como cadena textual. Entonces es más fácil ver que
string output = Regex.Replace(input, @"//", @"//");
es un reemplazo de /
a //
.
Si pretende usar la entrada en un patrón de expresiones regulares más adelante, puede ser una buena idea usar Regex.Encode.
input = Regex.Escape(input);
var result = Regex.Replace(@"afd/tas/asfd/", @"//", @"//");
El primer parámetro es la cadena // que es / en expresiones regulares.
El segundo parámetro no es procesado por expresiones regulares, por lo que lo colocará como está cuando se reemplace.