我正在编辑 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 样式的行尾来写入的。