Notepad++ 删除空行的单个实例

如何解决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

屏幕截图(之前):

enter image description here

屏幕截图(之后):

enter image description here

Demo & explanation

,

在 adrianHHH 的回答之后,我注意到了您的输出示例文本,并注意到您也想删除单个空行,所以我准备了我的第二个答案,这正是您所期待的.....
查找内容:^\n(?!\n{5})
替换为:nothing

enter image description here

全部替换后

enter image description here

,

要实现您的目标,您应该遵循以下三个步骤:

  1. 就像 AdrianHHH 提到的那样,您应该确保所有空行都是真的空行。

请注意,仅包含空格和/或制表符的行可能无法正确处理,问题不清楚应如何处理。如果应将包含空格和制表符的行视为空行,则首先执行菜单 => 编辑 => 空白操作 => 修剪尾随空格,或者执行正则表达式将 ^\h+$ 全部替换为空行。

  1. 使用“查找/替换”对话框 (Ctrl + H) 删除所有单个空行。
    将此正则表达式 (^\r\n)(?!\1) 插入“查找内容”字段并用空替换。

  2. 在“查找内容”字段中使用此正则表达式 (^\r\n)\1+ 删除所有出现的超过 2 个连续空行,并将其替换为 \1\1(两次粘贴组 1 aka.empty行)。

两个正则表达式的详细解释:

  1. (^\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
  1. (^\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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?