quick - regex replace c#
Escape del personaje especial en Regex (3)
¿Hay una manera de escapar de los caracteres especiales en expresiones regulares, como []()*
y otros, de una cadena?
Básicamente, le estoy pidiendo al usuario que ingrese una cadena, y quiero poder buscar en la base de datos usando expresiones regulares. Algunos de los problemas que encontré son too many)''s
o [xy] range in reverse order
, etc.
Entonces, lo que quiero hacer es escribir una función para reemplazar en la entrada del usuario. Por ejemplo, reemplazando (
con /(
, reemplazando [
con /[
¿Hay una función incorporada para expresiones regulares para hacerlo? Y si tengo que escribir una función desde cero, ¿hay una manera de contabilizar fácilmente todos los caracteres en lugar de escribir la instrucción de reemplazo una por una?
Estoy escribiendo mi programa en C # usando Visual Studio 2010
Puedes usar .NET incorporado en Regex.Escape para esto. Copiado del ejemplo de Microsoft:
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?]
Puedes usar Regex.Escape para la entrada del usuario.
string matches = "[]()*";
StringBuilder sMatches = new StringBuilder();
StringBuilder regexPattern = new StringBuilder();
for(int i=0; i<matches.Length; i++)
sMatches.Append(Regex.Escape(matches[i].ToString()));
regexPattern.AppendFormat("[{0}]+", sMatches.ToString());
Regex regex = new Regex(regexPattern.ToString());
foreach(var m in regex.Matches("ADBSDFS[]()*asdfad"))
Console.WriteLine("Found: " + m.Value);