Форматирование (отключение переноса слов) - это нечто большее, чем вы думаете.
Если вывод является результатом операции форматирования, тогда вам следует воспользоваться
этими правилами для обратного инжиниринга оригинала.
Например, у вас есть тест
This should all be on one line
since it's one sentence.
This is a new paragraph that
should be separate.
ЕслиВы удалили только одиночные новые строки, это будет выглядеть так:
This should all be on one line since it's one sentence.
This is a new paragraph thatshould be separate.
Кроме того, будет потеряно другое форматирование, такое как преднамеренные новые строки, поэтому что-то вроде:
This is Chapter 1
Section a
Section b
Превращается в
This is Chapter 1 Section a Section b
Найти новую строку очень просто /(?<!\n)\n(?!\n)/
но чем ее заменить.
Редактировать : На самом деле, даже не так легко найти отдельные новые строки, потому что визуально они находятся среди скрытых (горизонтальных) пробелов.
Есть 4 пути.
Удалить перевод строки, сохранить окружающее форматирование
$text =~ s/(?<!\s)([^\S\n]*)\n([^\S\n]*)(?!\s)/$1$2/g;
Удалить перевод строки и форматирование, подставитьпробел
$text =~ s/(?<!\s)[^\S\n]*\n[^\S\n]*(?!\s)/ /g;
То же, что и выше, но игнорировать символ новой строки в начале или конце строки
$text =~ s/(?<!\s)(?<!^)[^\S\n]*\n[^\S\n]*(?!$|\s)/ /g;
$text =~ s/(?<!\s)(?<!^)([^\S\n]*)\n([^\S\n]*)(?!$|\s)/$1$2/g;
Пример разбивки регулярного выражения(это минимум, необходимый только для выделения одной новой строки):
(?<!\s) # Not a whitespace behind us (text,number,punct, etc..)
[^\S\n]* # 0 or more whitespaces, but no newlines
\n # a newline we want to remove
[^\S\n]* # 0 or more whitespaces, but no newlines
(?!\s)/ # Not a whitespace in front of us (text,number,punct, etc..)