正则表达式匹配所有多余的和尾随的换行符

Vik*_*vub 2 c# regex

我试图找到一个 C# 兼容的正则表达式来匹配所有多余的换行符——包括空/纯空格行——允许替换:

第一行
    第二行

第三行

喜欢:

第一行
    第二行
第三行

没有任何尾随换行符。

著名的多线^\s*$没有匹配最后一个换行符。

我能够想出(?<!\S+)\r\n|(\r\n)+\z

  1. 可以在单行和多行模式下工作
  2. 很丑,可能很慢

有没有人能够想出一个简单的正则表达式来做同样的事情?

ste*_*ema 5

原因是,如果最后一行中没有任何内容,则$匹配\n字符串末尾的a 之前。

对于中间的空行

^\s*^
Run Code Online (Sandbox Code Playgroud)

^换行后匹配\n。所以这匹配从一行的开头到下一行的空格。

对于最后一个空行,您需要匹配从最后一个换行符之前到字符串末尾的所有空格

$\s*\z
Run Code Online (Sandbox Code Playgroud)

并结合

^\s*^|$\s*\z
Run Code Online (Sandbox Code Playgroud)

\z 匹配必须出现在字符串的末尾

在 msdn 上查看锚点

我的测试:

string s = "This is the first row\n\nThis is the third\n    \nThis the fifth\n";

string result = Regex.Replace(s, @"^\s*^|$\s*\z", "", RegexOptions.Multiline);
Console.WriteLine(result);

Console.WriteLine("fin");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)