La expresión regular en línea simple y probada que contiene delimitadores de expresiones regulares no funciona en código C#

Resuelto usatek asked hace 9 años • 1 respuestas

Tengo una expresión regular como esta:

name = dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487
name = Regex.Replace(name, @"/\W/g", "");

Esta expresión regular debería reemplazar "/", "-", "." con "". Pero no es así, ¿alguien puede explicarme por qué?

usatek avatar Jul 22 '15 17:07 usatek
Aceptado

No utilice delimitadores de expresiones regulares:

name = Regex.Replace(name, @"\W", "");

En C#, no puede utilizar delimitadores de expresiones regulares ya que la sintaxis para declarar una expresión regular es diferente de la de PHP, Perl o JavaScript u otros que admiten la <action>/<pattern>(/<substitution>)/modifiersdeclaración de expresiones regulares.

Solo para evitar confusión terminológica: los modificadores en línea (que imponen búsqueda que no distingue entre mayúsculas y minúsculas, modos multilínea, de una sola línea, detallados y otros) son ciertamente compatibles y se pueden usar en lugar de los RegexOptionsindicadores correspondientes (aunque el número de RegexOptionsindicadores posibles es mayor que el de los modificadores en línea). ). Aún así, los delimitadores de expresiones regulares no influyen en absoluto en el patrón de expresiones regulares, son solo parte de la sintaxis de la declaración y no afectan el patrón en sí. Digamos que son simplemente una especie de sustitutos ;o líneas de código que separan líneas nuevas.

En C#, los delimitadores de expresiones regulares no son necesarios y, por lo tanto, no se admiten. El estilo Perl s/\W//gse escribirá como var replaced = Regex.Replace(str, @"\W", string.Empty);. Etcétera.

Wiktor Stribiżew avatar Jul 22 '2015 10:07 Wiktor Stribiżew