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