繁体   English   中英

使用正则表达式删除文本文件中的多余空白行

[英]Remove extra blank lines in text file using regular expression

嗨,我想在源文本文件中删除多余的空行(这意味着如果有2个或更多空行,则仅保留1个空行)。 我使用了这种模式:

^(\s*(\n|\r|\r\n)){2,}

它无法处理文件末尾的空行,如下所示:

1. BlablablaCRLF
2. CRLF
3. 

上面(第3行)是文件的末尾,VS StyleCop抱怨这里有多个空行。 它看起来像文件末尾的换行符,但实际上什么都没有,我在notepad ++中打开了“显示所有字符”,我期望在文件末尾看到CRLF,但是没有。 我的模式无法识别此情况,该如何处理? 谢谢!

基本答案

如果这是您要匹配的:

  1. 多个连续的空行,其中多个均值> 1。
  2. 文件末尾的所有空行,由\\n终止文件隐式生成的行除外(可以认为是一种好习惯,请参见此处 )。
  3. 终止\\n之后的所有冗余空白。

然后,该模式可以帮助您:

(^\s*(\r|\n)){2,}|^\s+(\r|\n)?\Z

进一步说明

第一部分(^\\s*(\\r|\\n)){2,}为1,第二部分^\\s+(\\r|\\n)?\\Z匹配末尾多余的空行终止\\n之后的文件或多余的空格。

如果您的文件看起来像这样(带有Unix文件结尾)...

1. FirstLine\n
2. 
3. ThirdLine\n
4. FourthLine\n
5.
6.
7. SeventhLine\n

...那么它只匹配第5行和第6行,但最后不匹配。 由于\\n终止,因此Notepad ++会在最后显示第8行。 但是,如果在文件末尾有多个\\n ,或者在第7行中的\\n结束后还有其他\\t或空格,则将匹配。

如果您还想匹配\\n终止符生成的行(并因此在替换时删除\\n终止符),则可以使用^\\s*\\Z代替正则表达式的第二部分。

\\s*(\\r\\n)附加说明:这匹配每个允许的组合,例如abc\\nabc\\r\\nabc\\r因为\\s还包括\\n\\r

\\Z匹配整个文件/输入的结尾(而$只匹配一行的结尾)。

我敢肯定正则表达式的版本可能会短一些,但我的初衷是使其正常工作并易于理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM