首页 > 解决方案 > 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_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

但是,我无法弄清楚如何做到这一点,因为如果我这样做:

Edit > Line Operations > Remove Empty Lines

我最终得到了这个:

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

标签: regexnotepad++

解决方案


  • Ctrl+H
  • 找什么:[^\r\n]\R\K\R(?=[^\r\n])|((\R)\2)\1*
  • 用。。。来代替:$1$2
  • 检查 环绕
  • CHECK 正则表达式
  • Replace all

解释:

[^\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

截图(之前):

在此处输入图像描述

截图(之后):

在此处输入图像描述

演示和解释


推荐阅读