Regex.Split()在保留空格的同时判断单词

Joe*_*oel 5 c# regex split

我正在使用Regex.Split()用户输入并将其转换为列表中的单个单词,但目前它删除了他们添加的任何空格,我希望它保留空白.

string[] newInput = Regex.Split(updatedLine, @"\s+");
Run Code Online (Sandbox Code Playgroud)

Muh*_*han 7

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());
Run Code Online (Sandbox Code Playgroud)

这将为您提供4个拆分,每个拆分保留所有前导空格.

(?=\s+)
Run Code Online (Sandbox Code Playgroud)

意味着从前方有空位的地方分开.但是如果单独使用它,它将在示例文本上创建15个分割,因为在重复空格的情况下,每个空格后面跟着另一个空格.

(?=(?<=[^\s])\s+)
Run Code Online (Sandbox Code Playgroud)

这意味着从它前面具有非空格字符的点开始分割,并且它前面有空格.

如果文本从空格开始并且您希望在没有文本的第一次拆分中捕获该文本,则可以将表达式修改为以下

(?=(?<=^|[^\s])\s+)
Run Code Online (Sandbox Code Playgroud)

这意味着一系列空格在字符串开始之前需要具有非空格字符.