2011-08-01 19 views
7

no puede trabajar éste hacia fuera, esto coincide con una sola estrella:partido Regex estrella barra invertida

// Escaped multiply 
Text = Text.replace(new RegExp("\\*", "g"), '[MULTIPLY]'); 

Pero lo necesito para que coincida con \*, he intentado:

\\* 
\\\\* 
\\\\\* 

puede' ¡Resuélvelo, gracias por cualquier ayuda!

Respuesta

11

Usted estuvo cerca, \\\\\\* lo habría hecho.

mejor uso cadenas literales, que hace que sea más fácil:

RegExp(@"\\\*", "g") 

\\ coincide con una barra invertida (\\\\ en una cadena normal), \* coincide con un asterisco (\\* en una cadena normal).

0

Su sintaxis es completamente incorrecta. Se parece más a Javascript que a C#.

Esto funciona bien:

string Text = "asdf*sadf"; 

Text = Regex.Replace(Text, "\\*", "[MULTIPLY]"); 

Console.WriteLine(Text); 

Salida:

asdf[MULTIPLY]sadf 

para que coincida con \* que utilizaría el patrón "\\\\\\*".

4

Recuerde que hay dos 'niveles' de escape.

En primer lugar, está escapando de sus cadenas para el compilador C#, y también está escapando de sus cadenas para el motor Regex.

Si quiere hacer coincidir "\*" literalmente, necesita escapar de estos dos caracteres para el motor de expresiones regulares, ya que de lo contrario significan algo diferente. Escapamos de estos con barras diagonales inversas, por lo que tendrá "\\\*".

Luego, tenemos que escapar de las barras diagonales inversas para escribirlas como una cadena literal. Esto significa reemplazar cada barra invertida con dos barras diagonales inversas: "\\\\\\*".

En lugar de esta última parte, podríamos usar una "cadena verbatim", donde no se aplican escapes. En este caso, solo necesita el resultado del primer escape: @"\\\*".

+0

@Tim: ¿Eso coincide con cero o más barras invertidas? – porges

+0

Lo siento, me confundí. Tienes razón. –

Cuestiones relacionadas