Это может не подходить для каждого случая так, как вам нужно, но оно должно помочь вам в этом.
public IList<string> ChunkifyText(string bigString, int maxSize, char[] punctuation)
{
List<string> results = new List<string>();
string chunk;
int startIndex = 0;
while (startIndex < bigString.Length)
{
if (startIndex + maxSize + 1 > bigString.Length)
chunk = bigString.Substring(startIndex);
else
chunk = bigString.Substring(startIndex, maxSize);
int endIndex = chunk.LastIndexOfAny(punctuation);
if (endIndex < 0)
endIndex = chunk.LastIndexOf(" ");
if (endIndex < 0)
endIndex = Math.Min(maxSize - 1, chunk.Length - 1);
results.Add(chunk.Substring(0, endIndex + 1));
startIndex += endIndex + 1;
}
return results;
}