online c# regex

online - Regex(C#): Reemplace / n con / r / n



regex operators (7)

¿Cómo puedo reemplazar instancias solitarias de / n con / r / n (solo LF con CRLF) usando una expresión regular en C #?

Lo siento si es una pregunta estúpida, soy nuevo en Regex.

Sé hacerlo usando el plan String.Replace , como:

myStr.Replace("/n", "/r/n"); myStr.Replace("/r/r/n", "/r/n");

Sin embargo, esto no es elegante, y destruiría cualquier "/ r + / r / n" que ya esté en el texto (aunque es poco probable que existan).


Pruebe esto: Reemplazar (Char.ConvertFromUtf32 (13), Char.ConvertFromUtf32 (10) + Char.ConvertFromUtf32 (13))


Supongo que "myStr" es un objeto de tipo String, en ese caso, esto no es regex. / y / n son los equivalentes para CR y LF.

Mi mejor opción es que si sabes que tienes / n para CADA línea, no importa qué, entonces primero deberías quitar cada / r. Luego reemplace todo / n con / r / n.

La respuesta dada por chakrit también iría, pero luego necesitarás usar regex, pero ya que no dices qué es "myStr" ...

Editar: mirar los otros ejemplos me dice una cosa ... ¿por qué hacer las cosas difíciles, cuando puedes hacerlo fácil ?, porque no hay expresiones regulares, no es lo mismo que "debes usar": D

Edit2: una herramienta es muy valiosa cuando manipulas regex, xpath y otras cosas que te dan resultados extraños, te puedo señalar: http://www.regexbuddy.com/


myStr.Replace("([^/r])/n", "$1/r/n");

$ puede necesitar ser un /


Puede ser más rápido si usa esto.

(?<!/r)/n

Básicamente busca cualquier / n que no esté precedido por un / r. Es muy probable que esto sea más rápido, porque en el otro caso, casi todas las letras coinciden con [^ / r], por lo que capturaría eso, y luego buscaría / n después de eso. En el ejemplo que di, solo se detendría cuando encontrara un / n, y ellos mirarían antes para ver si lo encontraba.


Estaba tratando de hacer el código de abajo a una cadena y no estaba funcionando.

myStr.Replace("(?<!/r)/n", "/r/n")

Usé Regex.Replace y funcionó

Regex.Replace( oldValue, "(?<!/r)/n", "/r/n")


¿Con esto bastará?

[^/r]/n

Básicamente, coincide con un ''/ n'' precedido por un carácter que no es ''/ r''.

Si quieres que detecte líneas que comiencen con una sola ''/ n'' también, intenta

([^/r]|$)/n

Que dice que debe coincidir con ''/ n'' pero solo aquellos que son el primer caracter de una línea o aquellos que no van precedidos de ''/ r''

Puede haber casos especiales para comprobar, ya que estás jugando con la definición de las líneas en sí, el ''$'' podría no funcionar demasiado bien. Pero creo que deberías entender la idea.

EDITAR: credit @Kibbee El uso de look-ahead s es claramente mejor, ya que no capturará el carácter anterior coincidente y también ayudará con cualquier caso marginal. Así que aquí hay una mejor expresión regular + el código se convierte en:

myStr = myStr.Replace("(?<!/r)/n", "/r/n");


Si sé que los finales de línea deben ser uno de CRLF o LF, algo que me funciona es

myStr.Replace("/r?/n", "/r/n");

Esto esencialmente hace la misma respuesta de neslekkiM , excepto que solo realiza una operación de reemplazo en la cadena en lugar de dos. Esto también es compatible con motores Regex que no admiten búsquedas negativas o referencias inversas.