Этот вопрос похож на Как разбить строку на каждые n символов или на ближайший предыдущий пробел , однако, вопреки тому, что я ожидал, основываясь на заголовке, это решение не работает, если есть только одно длинное слово без пробелов.
Поэтому мне нужно регулярное выражение, которое разбивает строку на отдельные строки (при необходимости несколько раз) по максимуму символов в строке и оглядываясь назад n символов для возможного пробела (прервать там, если найден, в противном случае на максимальной длине)?
Редактировать 1: Например, при максимальной длине строки 30 символов и 15 символов обратного поиска пробелов:
Loremipsumissimplydummytext для отрасли печати и набора текста.
Первое слово этого предложения имеет длину 32 символа , Таким образом, выходные данные должны быть:
Loremipsumissimplydummytextoft # Line has length of 30 char
he printing and typesetting # Cut before the word at otherwise 30 char
industry.
Таким образом, первое слово должно быть принудительно вырезано после 30-го символа, поскольку пробелов не было.
Длина оставшейся строки равна 28 (или 29 со знаком da sh) перед словом «промышленность», поэтому на месте 30-го символа есть слово, поэтому решение ищет предыдущий пробел в диапазоне 15 символов. Эта строка прерывается перед словом «отрасль».
Редактировать 2: Второй пример текста:
Loremipsumissimply dummytext для отрасли печати и набора текста. Loremipsum - просто фальшивый текст в полиграфии и наборе текста. Loremipsumissum просто думает текст в печатной и верстки промышленности. Loremipsum - просто фиктивный текст индустрии печати и набора текста.
Должен вывести:
Loremipsumissimplydummytextoft
he printing and typesetting
industry. Loremipsumis simply
dummytext ofthe printing and
typesetting industry.
Loremipsumissimplydummytextoft
he printing and typesetting
industry. Loremipsumis simply
dummytext ofthe printing and
typesetting industry.
Сценарий использования этого регулярного выражения - форматирование длинной строки в читаемый текст с максимальной строкой принудительная длина и строки, начинающиеся с символа, а не пробела.
Необязательное требование: Когда после первоначальной публикации я добавил этот пример в Edit 1, я также добавил необязательное требование для добавление символа da sh '-' в начале следующей строки, если слово было вырезано с максимальной длиной строки. Сейчас я убираю это из примера и добавляю его как отдельное необязательное требование.
Итак, необязательное требование: если строка разбита на середине слова с максимальной длиной, а не с пробелом, тогда da sh должен быть добавлен в конце этой строки (а не в начале следующей строки, как я первоначально описал).
Loremipsumissimplydummytextoft- # Line length 30+1 char with an appended a dash
he printing and typesetting # Cut before the word at otherwise 30 char
industry.