Notepad++ 查找字符串“a”,删除行及后续行,直到找到字符串“b”

Notepad++ 查找字符串“a”,删除行及后续行,直到找到字符串“b”

我正在编辑 GEDCOM 文件并删除“坏的”GEDCOM 标签。我的示例是:- 我想要搜索“2 RIN”,删除该行和所有后续行,直到下一行的第一个字符为“1”(1 + 一个空格)。不应删除带有“1”的行。

一个例子:

现有文件

1 DEAT
2 TYPE D02 Death
2 DATE 1960
2 PLAC Perth
2 RIN 2
2 _PPT @@I1@@
3 TYPE 0 event owner
3 _NSQ 0
1 BURI
2 TYPE D04 Death, Burial
2 PLAC Australia

应结果为:

1 DEAT
2 TYPE D02 Death
2 DATE 1600
2 PLAC Perth
1 BURI
2 TYPE D04 Death, Burial
2 PLAC Australia

答案1

正则表达式^.*RIN.*\r\n(.*\r\n)*(?=^1.*)
或更好的
正则表达式^.*RIN.*\r\n(.*\r\n)*(?=^1 .*)

这就是你的正则表达式。用空替换它。或者用 \r\n

添加
解释一下。^匹配行首,然后匹配.*所有字符(但不包括新行,因为我们勾选了点不匹配新行框),然后 (.*\r\n)*匹配之后的所有行,直到匹配到您不匹配的内容。(?=^1 .*) 因此,只向前看紧接着出现的下一个字符,但这次,不要匹配它,并查找以 1 开头的行,然后是空格,然后是其他内容。如果在查找时找到它,则匹配该位置。

因此,请确保正则表达式识别的所有内容都匹配。从正则表达式开头识别的文本,到识别要匹配的位置的正则表达式前瞻,再到正则表达式结尾。

在此处输入图片描述

更新

对以上内容稍作更正。

A) 您询问以“2 RIN”开头的行。B
) 它需要对其中一个 * 进行非贪婪评估,以便它在第一次出现 ^1 之前匹配。C
) 您需要考虑文件是否具有 *nix 或 Windows 行尾。您可以在文档中执行查找并查找 \r\n 或 \n,然后查看匹配的内容,以查看文件使用哪个行尾。这是一种方法。您的文件具有 *nix 行尾,如 notepad++ 窗口右下角所示。

所以你想要这个正则表达式^2 RIN.*\n(.*\n)*?(?=^1.*)

如果它是 Windows 行尾,那么你会想要这个,如果你复制/粘贴就会发生这种情况,那么你会想要这个正则表达式 ^2 RIN.*\r\n(.*\r\n)*?(?=^1.*)

但是直接打开文件或文件的副本,您肯定想要 \n 版本,即 *nix 版本,^2 RIN.*\n(.*\n)*?(?=^1.*) 因为写入文件的 Windows 软件是使用 *nix 样式的行尾来写入的。

相关内容