El uso de \ b en C # expresiones regulares no funciona?
-
20-09-2019 - |
Pregunta
Me pregunto por qué la siguiente expresión regular no coincide.
string query = "\"1 2\" 3";
string pattern = string.Format(@"\b{0}\b", Regex.Escape("\"1 2\""));
string repl = Regex.Replace(query, pattern, "", RegexOptions.CultureInvariant);
Tenga en cuenta que si quito los caracteres límite de palabra (\ b) de pattern
, que coincide bien. ¿Hay algo acerca de '\ b' que podrían tropezar con esto?
Solución
Una cita no es un carácter de palabra, por lo que \ b no será un partido si está allí. No hay ninguna palabra personaje antes de la cita; Por lo tanto, antes de la cita, no hay una transición entre los caracteres de palabras y caracteres que no son de texto. Por lo tanto, no puede competir.
A partir de su comentario que está tratando de eliminar caracteres de palabra de una cadena. La forma más sencilla de hacerlo sería la de sustituir \w
con una cadena vacía:
string repl = Regex.Replace(query, "\w", "", RegexOptions.CultureInvariant);
Otros consejos
usted está esperando un espacio en blanco. no es encontrar uno. reemplace
string query = "\"1 2\" 3";
con
string query = "\" 1 2 \" 3";
y verá lo que quiero decir.