正则表达式匹配所有多余和尾随NewLines

时间:2012-10-15 12:21:57

标签: c# regex

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


first line
    second line

third line

像:

first line
    second line
third line

没有任何尾随换行符。

众所周知的多行^\s*$ 匹配上一个换行符。

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

  1. 适用于单行和多行模式
  2. 丑陋且可能很慢
  3. 是否有人能够提出简单正则表达式来做同样的事情?

2 个答案:

答案 0 :(得分:4)

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

对于

之间的空行
^\s*^
换行符^

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

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

$\s*\z

和组合

^\s*^|$\s*\z

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

请参阅Anchors on 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();

答案 1 :(得分:1)

要摆脱尾随换行符,混合方法怎么样:

Regex.Replace(input, @"^\s+$", "", RegexOptions.Multiline).TrimEnd()

简单易读。