从文本文件在c#删除CR LF
问题描述:
我有一个包含例如以下行的文本文件:从文本文件在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有什么样的输入。 –