Регулярное совпадение и замена в Java

У меня есть файл с количеством строк. Между ними могут быть пустые строки. Я хочу сопоставить все строки, которые имеют определенный шаблон, за которым следует пустая новая строка, и заменить ее только строкой (без следующей пустой новой строки). Строки, которые не имеют шаблона, но по-прежнему сопровождаются пустыми строками, должны быть оставлены как есть.

Образец файла

a + b --> c

c + d --> e
The empty line after this is left alone

e + a --> b

a --> b + c

Выходной файл

a + b --> c
c + d --> e
The empty line after this is left alone

e + a --> b
a --> b + c

У меня есть шаблон, который соответствует всем таким линиям.

String linePattern = "(.*-->.*)(\n\n)";
Pattern compiledPattern = Pattern.compile(linePattern);
Matcher matcher = compiledPattern.matcher(fileContentsAsString);

Есть ли элегантный способ убрать лишние пустые строки, следующие за такими строками, из всей строки?

1 ответ

На самом деле, это не так сложно

(\w+\s+\+\s+\w+\s+-->\s+\w+|\w+\s+-->\s+\w+\s+\+\s+\w+)[\s\n\r]+(\w+\s+\+\s+\w+\s+-->\s+\w+|\w+\s+-->\s+\w+\s+\+\s+\w+)

демонстрация

Исполняемый пример кода

String regex = "(\\w+\\s+\\+\\s+\\w+\\s+-->\\s+\\w+|\\w+\\s+-->\\s+\\w+\\s+\\+\\s+\\w+)[\\s\\n\\r]+(\\w+\\s+\\+\\s+\\w+\\s+-->\\s+\\w+|\\w+\\s+-->\\s+\\w+\\s+\\+\\s+\\w+)";
String string = "a + b --> c\n\n"
     + "c + d --> e\n"
     + "The empty line after this is left alone\n\n"
     + "e + a --> b\n\n"
     + "a --> b + c";
String subst = "$1\n$2";

Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(string);
String result = matcher.replaceAll(subst);
Другие вопросы по тегам