Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 记事本++;删除空行的单个实例_Regex_Notepad++ - Fatal编程技术网

Regex 记事本++;删除空行的单个实例

Regex 记事本++;删除空行的单个实例,regex,notepad++,Regex,Notepad++,我熟悉如何使用Notepad++从文本文件中删除空行/空行 但是,我看不到删除空行的单个实例的方法(例如,我希望能够删除单个空行,而不是整个文本文件中的一行,但不能删除一行中有3个空行的情况) 另外,使用下面的示例,是否有任何方法可以删除一行中有两个以上空行的空行块,一行中只剩下两个空行。我意识到我可能需要连续运行两个不同的regex命令,而不是同时进行这样的清理 例如,从以下内容开始: PROCEDURE post_insert ( x_afe_number

我熟悉如何使用Notepad++从文本文件中删除空行/空行

但是,我看不到删除空行的单个实例的方法(例如,我希望能够删除单个空行,而不是整个文本文件中的一行,但不能删除一行中有3个空行的情况)

另外,使用下面的示例,是否有任何方法可以删除一行中有两个以上空行的空行块,一行中只剩下两个空行。我意识到我可能需要连续运行两个不同的regex命令,而不是同时进行这样的清理

例如,从以下内容开始:

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

如果你有7行空行,你想删除其中4行, 然后试试这个正则表达式,
查找内容:
^\n{4}

替换为:
nothing


取决于您希望将它们放在
{}

之间的数字,记事本++的方法是使用查找字符串
([^\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

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

在Adrianhh的回答之后,我开始关注您的输出示例文本,并注意到您也希望删除单个空行,所以我准备了第二个答案,这就是您一直在等待的….
查找内容:
^\n(?!\n{5})

替换为:
nothing

毕竟


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

  • 正如前面提到的,您应该确保所有空行都是空的
  • 请注意,仅包含空格和/或制表符的行可能无法正确处理,但如何处理这些行的问题尚不清楚。如果包含空格和制表符的行应视为空行,则首先执行菜单=>编辑=>空白操作=>修剪尾随空格,或者执行正则表达式,将所有^\h+$替换为零

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

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

  • 两个正则表达式都详细解释了:

  • (^\r\n)(?!\1)
    匹配一个空行,但后面没有另一个空行:
  • (第一组的开始
    ^从行首搜索
    \r\n后跟行尾字符
    )第一组结束
    (第一组只匹配一个空行)
    (第二组开始)
    ?!消极前瞻(匹配除…之外的所有内容)
    \1组1的参考(空行)
    )第2组结束
    
  • (^\r\n)\1+
    匹配两个或多个连续的emtpy行:
  • (组的开始)
    ^从行首搜索
    \r\n后跟行尾字符
    )近群
    (找到第一个空行,可由组1引用)
    \1通过在正则表达式后面粘贴组1来扩展模式,以重复“空行”
    +添加“+”以匹配两个以上的连续空行
    
    • Ctrl+H
    • 查找内容:
      [^\r\n]\r\K\r(?=[^\r\n])|((\r\2)\1*
    • 替换为:
      $1$2
    • 检查环绕
    • 检查正则表达式
    • 全部替换
    说明:

    [^\r\n]#不是换行符
    \R#任何类型的断线
    \K#忘记我们所看到的一切,直到这个位置
    \R#任何类型的断线
    (?=[^\r\n])#正向前瞻,确保后面的字符不是换行符
    |#或
    (#第一组)
    (\R)#第2组,任何类型的换行符
    \2#回溯到第2组,换行符
    )#终端组1
    \1*#对组的反向引用、双换行符可能出现0次或更多次
    
    更换:

    $1#第1组、第2组换行符的内容
    $2#第2组内容,1换行符
    
    屏幕截图(之前):

    屏幕截图(之后):


    尝试<代码>((s))(^和替换为<代码> $1 < /代码>。将<代码> \n\r\n\/c>为您工作,替换为什么?请解释它是如何工作的,或它是如何工作的。当我尝试它时,它删除了测试文件中的所有空白行(记事本+7.7.1)。。并非所有空行,
    ^\n
    将逐个删除所有空行,