我试图找到一个与 C# 兼容的正则表达式来匹配所有多余的换行符——包括空行/空白行——允许替换:
first line
second line
third line
喜欢:
first line
second line
third line
没有任何尾随换行符。
知名多行^\s*$ 不匹配最后一个换行符。
我能够想出 (?<!\S+)\r\n|(\r\n)+\z 其中:
- 在单行和多行模式下都能工作
- 很丑而且可能很慢
有没有人能想出一个简单正则表达式来做同样的事情?
请您参考如下方法:
这样做的原因是,如果最后一行没有任何内容,则 $ 匹配字符串末尾的 \n 之前。
对于中间的空行
^\s*^
^ 匹配换行符 \n 之后。所以这匹配从一行开始到下一行的空格。
对于最后一个空行,需要匹配从最后一个换行符之前到字符串末尾的所有空格
$\s*\z
并结合
^\s*^|$\s*\z
\z 匹配必须出现在字符串的末尾
我的测试:
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();
