使用条件删除文本文件中的换行符

时间:2011-07-25 14:59:47

标签: c#

我有一个文本文件。其中的一些行以lf结尾,一些以crlf结尾。我只需删除lfs并留下所有crlfs。

基本上,我的文件看起来像这样

  

玛丽有一个lf

     

dog.crlf

     

她喜欢她,如果

     非常喜欢狗。 CRLF

我需要它

  

玛丽有一只狗.clf

     

她非常喜欢她的狗.clf

现在,我尝试无条件地删除所有lfs,但后来我无法弄清楚如何将其写回文本文件。如果我使用File.WriteAllLines并将一个字符串数组放入其中,它会自动重新创建换行符。如果我使用File.WriteAllText,它只会形成一行。 所以问题是 - 我如何获取像第一个文本文件并使其看起来像第二个?非常感谢您的宝贵时间。 顺便说一句,我检查了类似的问题,但仍然无法搞清楚。

3 个答案:

答案 0 :(得分:3)

使用带有负面后卫的正则表达式,只替换前面没有\n的{​​{1}}:

DEMO

\r

var result = Regex.Replace(sampleFileContent, @"(?<!\r)\n", String.Empty); ... (?<!negative look-behind。这意味着我们只想在)后面直接替换\n的实例时替换它们。

免责声明:根据您的文件大小,这可能是也可能不是可行的选项。如果你不关心开销或者你正在做一些快速修复,这是一个很好的解决方案,但如果文件很庞大,我会寻找更强大的解析器。

答案 1 :(得分:2)

这是Brad Christie的答案的替代品,它不使用正则表达式。

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

Here's a demo.似乎比根据此站点的正则表达式解决方案更快,但使用了更多的内存。

答案 2 :(得分:1)

刚试过它:

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