groovy: Как удалить строки из файла, которые начинаются с неуникальной строки
*** Отредактированный пример, чтобы показать заказ не является фактором
У меня есть файл с содержанием:
ABC-123 BLA bla</br>
ABC-123 lala lala</br>
ABC-234 AAA</br>
ABC-123 CCC</br>
ABC-567 ddd</br>
ABC-234 BBB</br></br>
Я хотел бы удалить строки, которые имеют предыдущую строку, которая начинается с той же строки и заканчивается файлом, содержащим (или содержащим строку):
ABC-123 BLA bla
ABC-234 AAA
ABC-567 ddd
В настоящее время мой код просто сохраняет содержимое файла в строку:
if (new File('description.txt').length() > 0 ) {
description = new File('description.txt').text
}
Я хотел бы обновить файл или сохранить первые "неуникальные" строки плюс уникальные строки в строке описания.
1 ответ
Groovy использует движок java regex, но мой пример для regex101 практически идентичен тому, что вам нужно - возможно, просто с использованием двойной обратной косой черты вместо одиночной. Вам также необходимо использовать модификатор поддержки нескольких строк (?m)
в начале.
/(^\S+ )([^\n]*\n)\1([^\n]*\n)/
Объяснение:
(^\S+ )
соответствует непробельным пробелам в начале строки, за которыми следует пробел. Захвачено как группа № 1
([^\n]*\n)
соответствует всему остальному до новой строки
\1
обратная ссылка, чтобы соответствовать тому, что найдено в группе #1
([^\n]*\n)
опять остаток второй строки
Затем вы заменяете то, что было сопоставлено с $1$2
, первая и вторая группы захвата.