Я редактирую файл 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 ответ1

1

регулярное выражение ^.*RIN.*\r\n(.*\r\n)*(?=^1.*)
или немного лучше
регулярное выражение ^.*RIN.*\r\n(.*\r\n)*(?=^1 .*)

так вот твой регкс. заменить это ничем. или с \r \n

добавленной
Объяснение. ^ Затем сопоставьте начало строки .* Любые символы (но не новую строку, потому что мы отметили, что точка не соответствует окну новой строки), затем (.*\r\n)* соответствуют все строки после этой вещи что вы не соответствуете. (?= ^ 1.*) Итак, посмотрите, что будет следующим символом, но на этот раз не сравнивайте его, и ищите строку, начинающуюся с 1, затем пробел, затем что угодно. ЕСЛИ при поиске вы найдете это, то сопоставьте позицию.

Итак, убедитесь, что все, что определяет регулярное выражение, совпадает. От текста, идентифицированного в начале регулярного выражения, до заглядывания в регулярное выражение, которое идентифицирует позицию для сопоставления и находится в конце регулярного выражения.

ОБНОВИТЬ

Небольшая коррекция к вышесказанному.

А) Вы спросили, какие строки начинаются с "2 RIN".
Б) Требовалась не жадная оценка для одной из * s, чтобы она соответствовала перед первым появлением ^ 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .