Этот код должен помочь вам. Он проверит длину текущей строки. Если в этом случае он больше, чем ваш maxLength (150), он начнется с 150-го символа и (в обратном порядке) найдет первый не-словный символ (как описано OP, это последовательность символов без пробела). Затем он сохранит строку до этого символа и начнет заново с оставшейся строкой, повторяя, пока мы не закончим с подстрокой, которая меньше символов maxLength. Наконец, присоедините их все снова вместе в финальной строке.
string line = "This is a really long run-on sentence that should go for longer than 150 characters and will need to be split into two lines, but only at a word boundary.";
int maxLength = 150;
string delimiter = "\r\n";
List<string> lines = new List<string>();
// As long as we still have more than 'maxLength' characters, keep splitting
while (line.Length > maxLength)
{
// Starting at this character and going backwards, if the character
// is not part of a word or number, insert a newline here.
for (int charIndex = (maxLength); charIndex > 0; charIndex--)
{
if (char.IsWhiteSpace(line[charIndex]))
{
// Split the line after this character
// and continue on with the remainder
lines.Add(line.Substring(0, charIndex+1));
line = line.Substring(charIndex+1);
break;
}
}
}
lines.Add(line);
// Join the list back together with delimiter ("\r\n") between each line
string final = string.Join(delimiter , lines);
// Check the results
Console.WriteLine(final);
Примечание: Если запустить этот код в консольном приложении, вы можете изменить «MAXLENGTH» в меньшем количестве, так что консоль не завернуть на вас.
Примечание: Этот код не принимает никаких символов табуляции. Если вкладки также включены, ваша ситуация становится немного сложнее.
Обновление: Я исправил ошибку, где новые строки начинались с пробела.
Почему регулярное выражение? Если вы покажете тег C#, сделайте это с помощью функций C#. –
Итак, вы хотите вставить строки для каждой строки каждые 150 символов? Пример ввода и вывода (с более коротким лимитом) может помочь визуализировать то, что вы хотите сделать. – Qtax
Bummer. Правило прерывания слова - боль: как вы определяете слово (намного сложнее, чем вы, вероятно, думаете)? – Crisfole