string text = "This is some text";
var splits = Regex.Split(text, @"(?=(?<=[^\s])\s+)");
foreach (string item in splits)
Console.Write(item);
Console.WriteLine(splits.Count());
Это даст вам 4 сплита, в каждом из которых сохранены все ведущие пробелы.
(?=\s+)
Означает разделение от точки, где есть пробелы впереди. Но если вы используете это одно, это создаст 15 разбиений в тексте образца, потому что за каждым пробелом следует другой пробел в случае повторяющихся пробелов.
(?=(?<=[^\s])\s+)
Это означает разделение от точки, у которой перед собой непустой символ и перед ней пробелы.
Если текст начинается с пробела, и вы хотите, чтобы он был захвачен в первом разделении без текста, тогда вы можете изменить выражение на следующее
(?=(?<=^|[^\s])\s+)
Это означает, что перед серией пробелов должен быть непробельный символ ИЛИ начало строки.