2017-10-05 262 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) 

使其比赛的空间为好,使替换删除它们。