Java: Как удалить все разрывы строк между двойными кавычками - PullRequest
1 голос
/ 16 июня 2019

У меня большой файл CSV, который я анализирую на Java. Проблема в том, что в некоторых текстовых разделах, помеченных знаком "", у меня возникают разрывы строк Сейчас я пытаюсь удалить все разрывы строк в разделах "", но пока не удалось.

Например, у меня есть следующий CSV:

"Test Line wo line break"; "Test Line 
with line break"
"Test Line2 wo line break"; "Test Line2 
with line break"

Результат должен быть:

"Test Line wo line break"; "Test Line with line break"
"Test Line2 wo line break"; "Test Line2 with line break"

До сих пор я пробовал следующее:

s.replaceAll("(\\w)*\r\n", "$1");

Но это, к сожалению, заменяет все разрывы строк, в том числе и в конце строк.

Затем я добавил двойные апострофы в регулярное выражение:

s.replaceAll("\"(\\w)*\r\n\"", "$1");

Но при этом, к сожалению, ничто не заменит вообще.

Не могли бы вы помочь мне выяснить, что я здесь делаю не так?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 16 июня 2019

Вы можете сопоставить все подстроки между двойными кавычками с помощью простого "[^"]*" регулярного выражения и удалить все разрывы строк между ними с помощью

String s = "\"Test Line wo line break\"; \"Test Line \nwith line break\"\n\"Test Line2 wo line break\"; \"Test Line2 \nwith line break\"";
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("\"[^\"]*\"").matcher(s);
while (m.find()) {
    m.appendReplacement(result, m.group().replaceAll("\\R+", ""));
}
m.appendTail(result);
System.out.println(result.toString());

Выход:

"Test Line wo line break"; "Test Line with line break"
"Test Line2 wo line break"; "Test Line2 with line break"

См. Java демо онлайн .

Обратите внимание, что .replaceAll("\\R+", "") находит 1 или более последовательностей разрыва строки и удаляет их только из того, что соответствует "" [^ "] *".

0 голосов
/ 16 июня 2019

Я бы не советовал разбирать CVS самостоятельно, если вы можете избежать этого.В целом, анализ необработанного текста часто становится затруднительным, потому что вам нужно иметь дело со всеми видами исключений, и, например, вы довольно легко достигаете точки, когда регулярных выражений недостаточно, и вы должны иметь возможность анализировать контекстно-свободные грамматики.

Здесь есть несколько опций для библиотек для анализа CSV: Анализ CSV в Java - рабочий пример ..?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...