2017-10-05 9 views
0

Je dispose d'un fichier texte contenant les lignes par exemple suivantes:Retirer CR LF du fichier texte dans C#

example text file

Je veux supprimer uniquement le CR LF lorsque la ligne précédente contient un CR à la fin . Via regex je peux supprimer tous les caractères, mais je ne peux pas créer la condition pour vérifier la ligne précédente.

Quelqu'un peut-il m'aider?

+0

Voulez-vous dire que vous voulez supprimer l'espace que la ligne qui suit directement la ligne se termine par CR? Essayez '(\ r) \ h * \ r \ n' et remplacez par' $ 1' –

+0

Qu'avez-vous essayé? Aussi, s'il vous plaît modifier votre question pour placer le texte dans la question, pas une image. – NightOwl888

+0

@ NightOwl888 Je crois que c'est le cas où une image est meilleure que du texte. Eh bien, au moins, il est clair quel type d'entrée OP a. –

Répondre

1

utilisé le code ci-dessous pour archiver ceci:

  String strFile = File.ReadAllText(@file, Encoding.Default); 

      Regex re = new Regex("\r(?= *\r)"); 

      strFile = re.Replace(strFile, ""); 

      File.WriteAllText(@file + ".tmp", strFile); 
0

Vous pouvez utiliser

(\r)[\p{Zs}\t]*\r\n 

et le remplacer par $1.

Détails

  • (\r) - Groupe 1: CR
  • [\p{Zs}\t]* - suivi avec 0+ horizontales
  • espaces blancs
  • \r\n - et un CRLF.

remplacement est le CR capturé dans le Groupe 1. Voir un C# demo:

var s = "  Line 1\r  \r\n  Line 2\r\n  \r\n  more text"; 
Console.WriteLine(Regex.Replace(s, @"(\r)[\p{Zs}\t]*\r\n", "$1") 
     .Replace("\r", "<CR>").Replace("\n", "<LF>")); 
// =>  Line 1<CR>  Line 2<CR><LF>  <CR><LF>  more text 
1

Vous pouvez remplacer

\r(?= *\r) 

rien.

Il correspond simplement à CR suivi de CR (éventuellement précédé d'un espace). Le vrai numéro est seulement le premier CR et le reste est fait par un look-ahead, ainsi le remplacement remplace seulement le CR qui manque c'est LF.

Il est une légère variation de ce que vous demandez, car au lieu d'enlever le CRLF, il supprime les s CR de » simples, ce qui rendra un fichier plus uniforme avec tous les CRLF fins, au lieu d'un mélange de simple CR et CRLFfin des lignes.

I.e.

Regex re = new Regex("\r(?= *\r)"); 
string sResult = re.Replace(sInput, "").ToString()); 

See it here at ideone.

Modifier

penser, ma solution laissera des espaces dès le début d'une ligne suivant une ligne -seulement CR, à la fin de celui-ci. La solution que vous décrivez vous quittera au début de la suivante. Je suppose que le préféré serait de les enlever. Pour cela, changer le RE à

\r *(?=\r) 

rendant correspondance les espaces ainsi, ce qui rend la remplacer les supprimer.