2017-10-05 145 views
0

我有一個包含例如以下行的文本文件:從文本文件在c#刪除CR LF

example text file

我想刪除CR LF僅當先前行包含一個CR末。通過正則表達式,我可以刪除全部字符,但是我無法建立檢查前一行的條件。

任何人都可以幫助我嗎?

+0

你的意思是你要刪除的空白只能直接用如下CR結束行就行?試試'(\ r)\ h * \ r \ n'並換成'$ 1' –

+0

你試過了什麼?另外,請編輯您的問題以將文本放入問題中,而不是圖像。 – NightOwl888

+0

@ NightOwl888我相信這是一個圖像比文本更好的情況。那麼,至少很清楚OP有什麼樣的輸入。 –

回答

1

用下面的代碼歸檔此:

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

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

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

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

您可以使用

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

$1取代。

詳細

  • (\r) - 第1組:一個CR
  • [\p{Zs}\t]* - 隨後與0+水平空格
  • \r\n - 和CRLF。

更換是CR採集到1組看到一個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

您可以用什麼代替

\r(?= *\r) 

它簡單地匹配CR的後面跟着CR的(可選地以空格開頭)。實際的匹配是只有第一個CR其餘的是由一個預見,所以替換隻取代CR缺少它LF

這是你問的是什麼,因爲不是刪除的CRLF,它消除了單CR的,這將使得所有CRLF結局更均勻的文件,而不是單一的CR混合的細微變化和CRLF行尾

I.e.

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

See it here at ideone

編輯

它的思考,我的解決方案會留下空間,從下面一CR -only線一條線的開始,在它的結束。你描述的解決方案將在下一個開始時留下。我猜首選是刪除它們。對於這一點,改變RE到

\r *(?=\r) 

使其比賽的空間爲好,使替換刪除它們。