2009-11-12 4 views
5

Je remplace toutes les occurrences de \n avec la balise <BR>, mais pour une raison quelconque, le texte entré a beaucoup de \n dans une rangée, donc j'ai besoin de les combiner. Fondamentalement, si plus de 1 \ n se produisent ensemble, remplacez-le par une seule balise < BR>.Comment puis-je remplacer plusieurs sauts de ligne par un seul <BR>?

Quelqu'un peut-il m'aider?

+3

Ne vous sous-estimez pas. Si vous savez même ce qu'est une regex, vous connaissez probablement déjà la réponse à cette question. –

Répondre

18

Cela remplacera toute séquence de retours-chariot (\r) et/ou de saut de ligne (\n) avec un seul Si vous souhaitez uniquement remplacer des séquences de deux ou plusieurs éléments, la réponse simpliste consiste à utiliser le quantificateur {2,} (qui signifie «au moins deux répétitions») au lieu de + (ce qui signifie «au moins une répétition»): Notez que l'expression ci-dessus traitera la combinaison CR + LF commune comme une séquence de deux éléments. Il est probable que vous voulez traiter CR + LF comme un seul élément au lieu, dans ce cas, l'expression devient un peu plus compliqué:

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

quel est le problème? pour? – mrblah

+1

\ r est pour les retours chariot. Dans le texte au format Windows (DOS), les combinaisons retour chariot/saut de ligne s'affichent sous la forme \ r \ n. –

+0

serait-il possible de définir un minimum de 2 répétitions avant un remplacement? – mrblah

2

Utilisez le code suivant:

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

Il pourrait bien être plus rapide d'appeler la méthode Replace normale à plusieurs reprises et ne pas utiliser une expression régulière du tout, comme ceci:

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

Notez que String.replace() est beaucoup plus rapide que d'utiliser RegEx:

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

Cela ne gérera pas trois nouvelles lignes; vous devez l'appeler en boucle. Vois ma réponse. – SLaks

Questions connexes