如何从格式化的字符串中删除空行?

Sae*_*ani 32 c# regex string stringbuilder

如何在C#中删除字符串中的空行?我在C#(winforms)中生成一些文本文件,由于某种原因,有一些空行.如何在生成字符串后删除它们(使用StringBuilderTextWrite).

示例文本文件:

THIS IS A LINE



THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!
Run Code Online (Sandbox Code Playgroud)

谢谢.

Tim*_*ker 79

如果您还想删除仅包含空格的行,请使用

resultString = Regex.Replace(subjectString, @"^\s+$[\r\n]*", string.Empty, RegexOptions.Multiline);
Run Code Online (Sandbox Code Playgroud)

^\s+$ 将删除从第一个空白行到最后一行(在连续的空行块中)的所有内容,包括仅包含制表符或空格的行.

[\r\n]*然后将删除最后一个CRLF(或者只是LF,这很重要,因为.NET正则表达式引擎匹配$a \r和a 之间\n,有趣的是).

  • 谢谢Tim,在研究Regex之后我也这么认为,但它没有帮助.更改为\ s*但最后一行仍保留在结果字符串中.我使用str.Trim()来摆脱它. (5认同)
  • @RobinRye:这是因为它需要至少一个空白字符才能匹配.如果将`\ s +`更改为`\ s*`,那么它也应该删除最后一行. (4认同)
  • 这几乎可以工作,但我有一个问题:最后一行是空的,它不会被删除.我在正则表达式上很糟糕,所以我不确定为什么? (3认同)

oob*_*obe 14

@Tim Pietzcker - 不适合我.我必须改变一点但是thx!
Ehhh C#Regex ..我不得不再次改变它,但这很好用:

private string RemoveEmptyLines(string lines)
{
  return Regex.Replace(lines, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd();
}
Run Code Online (Sandbox Code Playgroud)

示例:http: //regex101.com/r/vE5mP1/2


use*_*566 9

你可以试试 String.Replace("\n\n", "\n");

  • 你的问题没有说明.实际上你特意说"空行". (15认同)