Регулярное совпадение и замена в 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);