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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top