2012-04-09 15 views
18
string input = "Hello World!"; 
string pattern = "(World|Universe)"; 
string replacement = "$1"; 

string result = Regex.Replace(input, pattern, replacement); 

Tener el siguiente ejemplo, el resultado sería "Hello World!", como el $1 es reemplazado con el primer grupo (World|Universe), sin embargo, el resultado que quiero es "Hello $1!"Manejo de texto de sustitución de escape de expresiones regulares que contiene el carácter dólar

El El método Regex.Escape está destinado a ser utilizado para escapar de un patrón Regex, no de la sustitución, ya que puede escapar de otros caracteres, como barras y otros caracteres del patrón Regex. La solución obvia a mi problema es tener mi reemplazo igual a "$$1", y alcanzará "Hello $1!", pero me preguntaba si el signo de dólar es el único valor que tengo para escapar (suponiendo que replacement es generado por el usuario, y no lo sé por adelantado de tiempo), o hay una función auxiliar que ya lo hace.

¿Alguien sabe de una función para escapar del valor de reemplazo que usa Regex.Replace(string input, string pattern, string replacement)?

Respuesta

16

De MSDN:

El reemplazo parámetro especifica la cadena que consiste en sustituir cada partido en de entrada. reemplazo puede consistir en cualquier combinación de texto literal y substitutions.

Los siguientes sustituciones: are defined

  • número
  • $
  • $ {nombre}
  • $$
  • $ &
  • $ `
  • $'
  • $ +
  • $ _

sustituciones son las únicas construcciones especiales reconocidos en un patrón de sustitución. No se admite ninguno de los otros elementos del lenguaje de expresiones regulares, incluidos los caracteres que se escapan y el período (.), Que coincide con cualquier carácter. De manera similar, los elementos del lenguaje de sustitución se reconocen solo en patrones de reemplazo y nunca son válidos en patrones de expresiones regulares.

Parece que es solo el $ caracter que debe escaparse.

+1

También desde MSDN: las sustituciones son los únicos elementos del lenguaje de expresiones regulares que se reconocen en un patrón de reemplazo. Todos los demás elementos del lenguaje de expresiones regulares, incluidos los escapes de caracteres, solo se permiten en los patrones de expresiones regulares y no se reconocen en los patrones de reemplazo. – Gebb

+0

Esto se ve lo suficientemente bueno para mí, sospecho que hacer un tonto 'reemplazo'. Reemplazar ("$", "$$") 'debería ser bueno el 100% del tiempo, entonces? – Matthew

+7

Sí, 'replacement.Replace (" $ "," $$ ")' debería ser todo lo que necesita. – dtb

Cuestiones relacionadas