[英]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,但是没有。 我的模式无法识别此情况,该如何处理? 谢谢!
如果这是您要匹配的:
\\n
终止文件隐式生成的行除外(可以认为是一种好习惯,请参见此处 )。 \\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\\n
, abc\\r\\n
或abc\\r
因为\\s
还包括\\n
和\\r
。
\\Z
匹配整个文件/输入的结尾(而$
只匹配一行的结尾)。
我敢肯定正则表达式的版本可能会短一些,但我的初衷是使其正常工作并易于理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.