2013-03-28 1 views
2

Je souhaite remplacer un nombre de \r\n par un seul \r\n\r\n en C#. Désolé si c'est une question stupide mais je suis nouveau à regex.
En fait, j'essayéRemplacement de plusieurs sauts de ligne par un seul saut de ligne

clearstring = Regex.Replace(clearstring, @"\r\n+", "\r\n\r\n", RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase); 

mais il ne fonctionne pas, des suggestions? Je serai reconnaissant.

Répondre

4

Essayez

clearstring = Regex.Replace(clearstring, @"(\r\n)+", "\r\n\r\n", RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase); 

La règle est que quantificateurs (le signe plus dans votre cas) ne concernent que le groupe immédiatement précédent ou de la classe de caractère, ce qui dans votre cas est seulement \ n. Si vous souhaitez inclure plusieurs caractères ou classes, vous devez les regrouper en paranthèse.

+0

Logic réponse Merci – MohamedSayed

+1

l'homme bon de voir que je pouvais aider. Utilisez toujours la case à cocher verte à gauche si une réponse vous convient. – dotNET

+1

Ce commentaire n'est pas sur le problème corrent. Mais si je fournis '/ r/r/n/r/n/n/r/n', votre code me donnera deux nouvelles lignes en sortie. Donc, quand c'est un problème de sécurité, j'utiliserais une boucle 'while' pour effacer la chaîne jusqu'à ce qu'il n'y ait plus deux nouvelles lignes après. Mais ce n'est pas obligatoire dans ce cas –

2
Regex.Replace(str, @"(\r\n){2,}", Environment.NewLine) 

Cela remplacera seulement si deux ou plusieurs lignes vides consécutives se trouvent

Questions connexes