2009-11-12 22 views
5

Estoy reemplazando todas las ocurrencias de \n con la etiqueta <BR>, pero por alguna razón el texto ingresado tiene muchos \n en una fila, así que necesito combinarlos.¿Cómo puedo reemplazar varios saltos de línea con un solo <BR>?

Básicamente, si aparecen más de 1 \ n juntos, reemplácelos con solo una etiqueta < BR>.

¿Alguien me puede ayudar con esto?

+3

No te subestimes. Si aún sabe qué es una expresión regular, probablemente ya sepa la respuesta a esta pregunta. –

Respuesta

18

Esto reemplazará cualquier secuencia de devoluciones de carro (\r) y/o avances de línea (\n) con un solo <br />:

string formatted = Regex.Replace(original, @"[\r\n]+", "<br />"); 

Si solo quiere reemplazar secuencias de dos o más elementos, la respuesta simplista es usar el cuantificador {2,} (que significa "al menos dos repeticiones") en lugar de + (lo que significa "al menos una repetición"):

string formatted = Regex.Replace(original, @"[\r\n]{2,}", "<br />"); 

Tenga en cuenta que la expresión anterior tratará la combinación común de CR + LF como una secuencia de dos elementos. Es probable que usted querrá tratar CR + LF como un único elemento en su lugar, en cuyo caso la expresión se convierte en un poco más complicado:

string formatted = Regex.Replace(original, @"(?:\r\n|\r(?!\n)|(?<!\r)\n){2,}", "<br />"); 
+0

¿cuál es el \ r? ¿para? – mrblah

+1

es para devoluciones de carruajes. En el texto formateado de Windows (DOS), verá combinaciones de retorno de carro/avance de línea en forma de \ r \ n. –

+0

¿sería posible establecer un mínimo de 2 repeticiones antes de un reemplazo? – mrblah

2

Utiliza el siguiente código:

str = Regex.Replace(str, @"[\r\n]+", "<br />"); 

Bien podría ser más rápida para llamar a los normales Replace método varias veces y no utilizar una expresión regular en absoluto, como esto:

int oldLength; 
do { 
    oldLength = str.Length; 
    str = str.Replace('\r', '\n'); 
    str = str.Replace("\n\n", "\n"); 
} while(str.Length != oldLength); 

str = str.Replace("\n", "<br />"); 
-1

Tenga en cuenta que String.Replace() es mucho más rápido que el uso de expresiones regulares:

string result = oldString.Replace("\n\n","\n"); 
result = result .Replace("\n","<br>"); 
+0

Esto no manejará tres nuevas líneas; necesitas llamarlo en un bucle. Ver mi respuesta – SLaks

Cuestiones relacionadas