2009-11-12 1 views
5

Sto sostituendo tutte le occorrenze di \n con il tag <BR>, ma per qualche motivo il testo inserito ha molti \n di fila, quindi ho bisogno di combinarli.Come posso sostituire più interruzioni di riga con un unico <BR>?

In sostanza, se più di 1 \ n si verificano insieme, sostituirlo con un solo tag < BR>.

Qualcuno può aiutarmi con questo?

+3

non sottovalutare te stesso. Se sai anche che cos'è una regex, probabilmente conosci già la risposta a questa domanda. –

risposta

18

Questo sostituirà qualsiasi sequenza di carriage-return (\r) e/o linefeeds (\n) con un singolo <br />:

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

Se si desidera solo sostituire sequenze di due o più elementi, la risposta semplicistica consiste nell'utilizzare il quantificatore {2,} anziché "(che significa" almeno una ripetizione "):

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

noti che l'espressione sopra tratterà la combinazione comune LF CR + come una sequenza di due elementi. E 'probabile che si vorrà per il trattamento di CR + LF come un unico elemento, invece, nel qual caso l'espressione diventa un po' più complicato:

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

qual è il \ r? per? – mrblah

+1

\ r è per i ritorni a capo. Nel testo formattato di Windows (DOS), vedrai combinazioni di ritorno a capo/avanzamento riga nel formato di \ r \ n. –

+0

sarebbe possibile impostare un minimo di 2 ripetizioni prima di una sostituzione? – mrblah

2

utilizzare il seguente codice:

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

Potrebbe anche essere più veloce di chiamare i normali Replace metodo più volte e non utilizzare un Regex a tutti, in questo modo:

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

noti che String.Replace() è molto più veloce rispetto all'utilizzo di RegEx:

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

Questo non gestirà tre newline; devi chiamarlo in un ciclo. Vedi la mia risposta. – SLaks