C#正则表达式替换不起作用

时间:2016-09-29 19:09:45

标签: c# regex file text

我正在尝试从文本文件中删除新行。在记事本中打开文本文件并没有显示我正在尝试删除的换行符(它看起来像一个大墙的文本),但是当我在崇高中打开文件时,我可以看到它们。

enter image description here

在sublime中,我可以删除模式'\ n \ n',然后模式'\ n(?!AAD)'没问题。但是,当我运行以下代码时,生成的文本文件保持不变:

obj.flatMap(x => Future.sequence(x))

我做错了什么?

3 个答案:

答案 0 :(得分:2)

如果您不想花费数小时尝试重新调整各种类型的换行符的代码,这是一个通用的解决方案:

string str = File.ReadAllText(fileloc);
File.WriteAllText(fileloc + "formatted", 
    Regex.Replace(Regex.Replace(str, "(?:\r?\n|\r){2}", ""), "(?:\r?\n|\r)(?!AAD)", "")
);

<强>详情:

换行符可以与(?:\r?\n|\r)匹配:一个可选的CR,后跟一个强制性的LF。要匹配2个连续的换行符,可以附加限制量词 - (?:\r?\n|\r){2}

答案 1 :(得分:1)

经验解决方案。以二进制模式打开示例文件显示它包含0x0D个字符,这些字符是回车符\r。所以我想出了这个(多行以便于调试):

public void Format(string fileloc)
{
    var str = File.ReadAllText(fileloc);
    var firstround = Regex.Replace(str, @"\r\r", "");
    var secondround = Regex.Replace(firstround, @"\r(?!AAD)", "");
    File.WriteAllText(fileloc + "formatted", secondround);
}

答案 2 :(得分:0)

这可能是windows / linux不匹配吗?尝试更换&#39; \ r \ n&#39;代替。