如何解决Notepad++ 删除空行的单个实例
我熟悉如何使用 Notepad++ 从文本文件中删除空白/空行。
但是,我看不到删除空行的单个实例的方法(例如,我希望能够删除单个空行,而不是整个文本文件中的 1 个单行,但不能删除案例例如,一行中有 3 个空行)。
此外,使用下面的示例,是否有任何方法可以删除一行中有超过 2 个空行的空行块,以便在一行中只留下 2 个空行。我意识到我可能需要连续运行两个不同的正则表达式命令,而不是同时进行如此整理。
例如,从这个开始:
PROCEDURE post_insert (
x_afe_number IN VARCHAR2,x_afe_sub_type IN VARCHAR2,x_amend_or_suppl_num IN NUMBER);
PROCEDURE Insert_Row
(x_rowid IN OUT VARCHAR2,x_afe_number VARCHAR2,x_afe_sub_type VARCHAR2,x_amend_or_suppl_num IN OUT NUMBER,x_project_desc VARCHAR2
我想删除单个空行,以:
PROCEDURE post_insert (
x_afe_number IN VARCHAR2,x_amend_or_suppl_num IN NUMBER);
PROCEDURE Insert_Row
(x_rowid IN OUT VARCHAR2,x_project_desc VARCHAR2
但是,我无法弄清楚如何做到这一点,因为如果我这样做:
Edit > Line Operations > Remove Empty Lines
我最终得到了这个:
PROCEDURE post_insert (
x_afe_number IN VARCHAR2,x_amend_or_suppl_num IN NUMBER);
PROCEDURE Insert_Row
(x_rowid IN OUT VARCHAR2,x_project_desc VARCHAR2
解决方法
如果您有 7 个空行并且您想删除其中的 4 个,
然后试试这个正则表达式,
查找内容:^\n{4}
替换为:nothing
取决于您想要的数字,将它们放在 {}
Notepad++ 的一种方法是使用查找字符串 auto
并替换为 ([^\r\n]\R)\R([^\r\n])
。这将查找一个非行尾字符,然后是两个行尾字符,然后是另一个非行尾字符。两个行尾匹配一个非空行的结尾,然后是一个空行。替换插入两个保存的非行尾字符,它们之间有一个行尾。选择“环绕”和“正则表达式”,然后执行“全部替换”。可能需要执行第二次“全部替换”,问题中的示例不需要它,但需要正确处理仅包含一个字符的行的任一侧的空行。
说明:
\1\2
请注意,仅包含空格和/或制表符的行可能无法正确处理,问题不清楚应如何处理。如果应将包含空格和制表符的行视为空行,则首先执行菜单 => 编辑 => 空白操作 => 修剪尾随空格,或者做一个正则表达式替换所有的 ( Start of group
[^\r\n] One character that is not CR or LF
\R An end of line
) End of group
\R The unwanted empty line
([^\r\n]) Another group containing one character that is not CR or LF
。
- Ctrl+H
- 查找内容:
[^\r\n]\R\K\R(?=[^\r\n])|((\R)\2)\1*
- 替换为:
$1$2
- 检查 环绕
- 检查 正则表达式
- 全部替换
说明:
[^\r\n] # not a linebreak
\R # any kind of linebreak
\K # forget all we have seen until this position
\R # any kind of linebreak
(?=[^\r\n]) # positive lookahead,make sure we have a character that is not a linebreak after
| # OR
( # group 1
(\R) # group 2,any kind of linebreak
\2 # backreference to group 2,linebreak
) # end group 1
\1* # backreference to group,double linebreak,may appear 0 or more times
替换:
$1 # content of group 1,2 linebreak
$2 # content of group 2,1 linebreak
屏幕截图(之前):
屏幕截图(之后):
,在 adrianHHH 的回答之后,我注意到了您的输出示例文本,并注意到您也想删除单个空行,所以我准备了我的第二个答案,这正是您所期待的.....
查找内容:^\n(?!\n{5})
替换为:nothing
全部替换后
,要实现您的目标,您应该遵循以下三个步骤:
- 就像 AdrianHHH 提到的那样,您应该确保所有空行都是真的空行。
请注意,仅包含空格和/或制表符的行可能无法正确处理,问题不清楚应如何处理。如果应将包含空格和制表符的行视为空行,则首先执行菜单 => 编辑 => 空白操作 => 修剪尾随空格,或者执行正则表达式将 ^\h+$ 全部替换为空行。
-
使用“查找/替换”对话框 (Ctrl + H) 删除所有单个空行。
将此正则表达式(^\r\n)(?!\1)
插入“查找内容”字段并用空替换。 -
在“查找内容”字段中使用此正则表达式
(^\r\n)\1+
删除所有出现的超过 2 个连续空行,并将其替换为\1\1
(两次粘贴组 1 aka.empty行)。
两个正则表达式的详细解释:
-
(^\r\n)(?!\1)
匹配一个空行,后面没有另一个空行:
( start of first group
^ search from start of line
\r\n followed by end of line character
) end of first group
(first group simply matches an empty line)
( start of second group
?! negative lookahead (match everything exept of...)
\1 reference of group 1 (empty line)
) end of group 2
-
(^\r\n)\1+
匹配两个或多个连续的空行:
( start of group
^ search from start of line
\r\n followed by end of line character
) close group
(first empty line is found and can be referenced by group 1)
\1 extend the pattern by pasting group 1 behind the regex to repeat the "empty line"
+ add the "+" in order to match also more than two consecutive empty lines
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。