\A(.{0,5}\b)(.{0,11}\b)(.{0,20}\b)+\Z
будет захватывать до пяти символов в группе 1, до 11 в группе 2 и фрагменты до 20 в группе 3. Совпадения будут разделяться по разделителям слов во избежание разделения в середине слова. Пробелы, разрывы строк и т. Д. Считаются символами и будут сохранены.
Хитрость в том, чтобы найти отдельные совпадения в повторяющейся группе, что можно сделать только в .NET и Perl 6:
Match matchResults = null;
Regex paragraphs = new Regex(@"\A(.{0,5}\b)(.{0,11}\b)(.{0,20}\b)+\Z", RegexOptions.Singleline);
matchResults = paragraphs.Match(subjectString);
if (matchResults.Success) {
String line1 = matchResults.Groups[1].Value;
String line2 = matchResults.Groups[2].Value;
Capture line3andup = matchResults.Groups[3].Captures;
// you now need to iterate over line3andup, extracting the lines.
} else {
// Match attempt failed
}
Я совсем не знаю C # и пытался создать это из шаблонов RegexBuddy и кода VB здесь , поэтому, пожалуйста, не стесняйтесь указывать на мои ошибки кодирования.
Обратите внимание, что пробел в начале второй строки записывается в конце предыдущего матча.