Notepad++中的正则表达式以删除空行

5
我有多个HTML文件,其中一些有空白行,我需要一个正则表达式来删除所有空白行,只留下一个空白行。因此,它会删除超过一个空白行的任何内容,并保留那些只有一个或零个空白行(没有文本的行)。
我还需要考虑到不完全空白的行,因为有些行可能包含空格或制表符(不显示的字符),所以只要多于一行,我需要用正则表达式将这些带有空格或制表符的行也删除。

据我所知,Notepad++的正则表达式模式不匹配多行,这意味着您将无法将多行缩减为一行。 - zzzzBov
你能否发布一份你的文本文件样例? - dlock
查看 TextFX 菜单 -> TextFX 编辑 -> 删除多余的空行? - Alex K.
谢谢大家,答案很有效。关于TextFX Edit,它只适用于一个文件,并且如果页面中有空格或制表符,它不会忽略它们。 - Mike
有一种更简单的方法可以做到这一点,而无需使用正则表达式:编辑 > 行操作 > 删除空行(包含空白字符)。 - Andreas
显示剩余3条评论
8个回答

9

搜索

^([ \t]*)\r?\n\s+$

并替换为

\1

解释:

^         # Start of line
([ \t]*)  # Match any number of spaces or tabs, capture them in group 1
\r?\n     # Match one linebreak
\s+       # Match any following whitespace
$         # until the last possible end of line.

\1将包含第一行的空白字符,因此当您将其用作替换字符串时,只有第一行的空白符将被保留(不包括末尾的换行符)。


应该可以。我没有安装Notepad ++,但那是相当基础的东西。 - Tim Pietzcker
@MartinF:能详细说明一下吗?“不起作用”具体指什么? - Tim Pietzcker
我之前尝试过,但没有反应,但现在在另一台电脑上却可以工作!(我试图取消投票,但似乎需要进行编辑。也许可以添加一个对“\1”替换的解释?) - Martin F
回到原始电脑。它“部分工作”:一些空行序列被减少为单个空行,而许多只被减少为两个空行。在简化的情况下,后续调用没有效果。有许多“\r\n\r\n\r\n”的出现,您的正则表达式简化对其没有影响。将“\r\n\r\n\r\n”简单替换为“\r\n\r\n”然后就可以工作了。奇怪。 - Martin F
你确定在空格字符之间没有其他字符(例如不可打印的Unicode代码点)吗?我想NPP有一个十六进制编辑器,你可以用来检查吗? - Tim Pietzcker

9

这在我的电脑上成功运行:notepad++ v6.5.1. UNICODE windows 7

查找内容:^[ \t]*\r\n

替换为:什么也不要留空

查找模式:正则表达式。


2

enter image description here

您可以自行查找需要替换的内容,例如\n\n、\n\r\n或\r\n\r\n等等...现在您甚至可以根据需要修改正则表达式^([ \t]*)\r?\n\s+$


2

搜索(\r?\n(\t| )*){3,},用\r\n\r\n替换,勾选"正则表达式"和". 匹配换行符"。

在Notepad++ 6.2中测试过。


2
这将替换连续的空行(包含或不包含空格)并将其替换为一个新行。
搜索: (\s*\r?\n){3,} 替换为: \r\n

1
Windows的换行符是\r\n,而不是\n\r - Tim Pietzcker

1
我测试了以上的建议,总是删除得太少或太多。这样就会出现两种情况:要么你没有空行,而之前至少有一个空行;要么没有删除足够(留下了空格等)。不幸的是,我还不能写评论。我测试了6.1.5和更新到6.2后再次测试。根据文件数量的不同,我建议使用


Edit->Blank Operations->Trim trailing whitespace

按下 Ctrl+A 然后

TextFX -> TextFX Edit -> Delete surplus blank lines

我尝试录制的宏没有起作用。甚至有一个仅用于删除尾随空格的宏(Alt+Shift+S,请参见“设置”|“快捷键映射器”|“宏”)。

Edit->Blank Operations->Remove unnecessary EOL and whitespace

但这将删除每个行末结束符并将所有内容放在一行中。


谢谢。我正在寻找正则表达式,因为我需要在多个文件中执行该操作。所有这些NP ++中建议的菜单仅适用于一次一个文件,仅适用于所选文本。然而,我接受的第一个答案可以解决问题。 - Mike
1
@Mike,你接受的那个方案对我没用,而且在有空格和没有空格的混合空白行的情况下,它会留下两个空白行而不是一个。 - Campfire

1

我在代码中查找了 ^\r\n 并在 "替换为" 文本框中什么都不输入,然后点击了 "全部替换"。


1
在notepad++ v8.4.7中,有以下选项:

编辑 > 行操作 > 删除空行(包含空格字符)

或者

编辑 > 行操作 > 删除空行

因此,不需要使用正则表达式来执行此操作。但是,这仅适用于一次处理一个文件。


1
这将删除所有的空行。他们想要保留其中一个。 - Toto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接