我有一个文本文件。其中的一些行以lf结尾,一些以crlf结尾。我只需删除lfs并留下所有crlfs。
基本上,我的文件看起来像这样
玛丽有一个lf
dog.crlf
她喜欢她,如果
非常喜欢狗。 CRLF
我需要它
玛丽有一只狗.clf
她非常喜欢她的狗.clf
现在,我尝试无条件地删除所有lfs,但后来我无法弄清楚如何将其写回文本文件。如果我使用File.WriteAllLines并将一个字符串数组放入其中,它会自动重新创建换行符。如果我使用File.WriteAllText,它只会形成一行。 所以问题是 - 我如何获取像第一个文本文件并使其看起来像第二个?非常感谢您的宝贵时间。 顺便说一句,我检查了类似的问题,但仍然无法搞清楚。
答案 0 :(得分:3)
使用带有负面后卫的正则表达式,只替换前面没有\n
的{{1}}:
\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);