2011-07-25 62 views
1

我有一個文本文件。其中的一些行以lf結尾,一些以crlf結束。我只需要刪除lfs並保留所有crlfs。用條件刪除文本文件中的換行符

基本上,我的文件看起來像這樣

瑪麗有LF

dog.crlf

她喜歡她的LF

狗非常多。 CRLF

我需要它是

瑪麗有隻dog.crlf

她喜歡她的狗非常much.crlf

現在,我嘗試刪除所有的LFS無條件的,但我不知道如何將它寫回到文本文件。如果我使用File.WriteAllLines並將字符串數組放入其中,它會自動重新創建換行符。如果我使用File.WriteAllText,它只形成一行。 所以問題是 - 我如何將文本文件像第一個文件一樣,並使其看起來像第二個文件?非常感謝您的寶貴時間。順便說一下,我檢查了類似的問題,但仍然無法解決它。

+2

你可以加載文件,並調用Regex.Replace(filecontents,@「(?<!\ r)\ n」,String.Empty);'([see docs](http:// msdn .microsoft.com/en-us/library/e7f5w83z.aspx)) –

+0

Filecontents表示單個字符串?如果是這樣,我該如何將它重新寫入文件中,並且它是否具有所需的結構?謝謝你的幫助! – Max

+0

您將需要發佈如何閱讀文件或如何生成文件。我的理解是你使用'File'對象有一些方法,但我需要看到更多的結構才能做出準確的判斷。 –

回答

3

與負向後看,僅使用正則表達式替換不是由\r前面的\n

DEMO

var result = Regex.Replace(sampleFileContent, @"(?<!\r)\n", String.Empty); 

(?<! ... )negative look-behind。這意味着我們只想在其後面不存在\r的情況下替換\n的實例。

免責聲明:根據您的文件大小,這可能是也可能不是一個可行的選項。如果你不關心開銷或者你正在做一些快速修復,這是一個很好的解決方案,但是如果文件將會很大,我會尋找更強大的解析器。

+0

太棒了,它只是我需要的方式,非常感謝。 – Max

1

只是測試它:

string file = File.ReadAllText("test.txt"); 
file = file.Replace("\r", ""); 
File.WriteAllText("test_replaced.txt", file); 
+0

再一次,這無條件地取代**所有**回車。即使如此,OP還是希望更換擱淺的換行符,而不是回車。 - 編輯:或者我錯了... –

2

這是布拉德·克里斯蒂的答案,不使用正則表達式的替代品。

String result = sampleFileContent.Replace("\r\n", "**newline**") 
           .Replace("\n","") 
           .Replace("**newline**","\r\n"); 

Here's a demo.似乎比根據這個網站正則表達式溶液更快,但使用比特更多的內存。