Противоположным подходом будет сопоставление разделителей вместо абзацев, что делает проблему почти тривиальной. Рассмотрим:
string[] paragraphs = Regex.Split(text, @"^\s*$", RegexOptions.Multiline);
Разделив входную строку на пустые строки, вы можете легко получить все абзацы. Если вам нужны только пустые строки без пробелов, вы можете упростить это еще больше и использовать parretn ^$
. В этом случае вы также можете использовать не-регулярное выражение String.Split с массивом разделителей:
string[] separators = {"\n\n", "\r\r", "\r\n\r\n"};
string[] paragraphs = text.Split(separators,
StringSplitOptions.RemoveEmptyEntries);