我有一個包含例如以下行的文本文件:從文本文件在c#刪除CR LF
我想刪除CR LF僅當先前行包含一個CR末。通過正則表達式,我可以刪除全部字符,但是我無法建立檢查前一行的條件。
任何人都可以幫助我嗎?
我有一個包含例如以下行的文本文件:從文本文件在c#刪除CR LF
我想刪除CR LF僅當先前行包含一個CR末。通過正則表達式,我可以刪除全部字符,但是我無法建立檢查前一行的條件。
任何人都可以幫助我嗎?
用下面的代碼歸檔此:
String strFile = File.ReadAllText(@file, Encoding.Default);
Regex re = new Regex("\r(?= *\r)");
strFile = re.Replace(strFile, "");
File.WriteAllText(@file + ".tmp", strFile);
您可以使用
(\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
您可以用什麼代替
\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());
編輯
它的思考,我的解決方案會留下空間,從下面一CR
-only線一條線的開始,在它的結束。你描述的解決方案將在下一個開始時留下。我猜首選是刪除它們。對於這一點,改變RE到
\r *(?=\r)
使其比賽的空間爲好,使替換刪除它們。
你的意思是你要刪除的空白只能直接用如下CR結束行就行?試試'(\ r)\ h * \ r \ n'並換成'$ 1' –
你試過了什麼?另外,請編輯您的問題以將文本放入問題中,而不是圖像。 – NightOwl888
@ NightOwl888我相信這是一個圖像比文本更好的情況。那麼,至少很清楚OP有什麼樣的輸入。 –