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, первая и вторая группы захвата.

Другие вопросы по тегам