我正在使用Regex.Split()
来获取用户输入并将其转换为列表中的单个单词,但此时它会删除它们添加的任何空格,我希望它能保留空白。
string[] newInput = Regex.Split(updatedLine, @"\s+");
答案 0 :(得分: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());
这将为您提供4个拆分,每个拆分保留所有前导空格。
(?=\s+)
意味着从前方有空格的点开始分割。但是如果单独使用它,它将在示例文本上创建15个分割,因为在重复空格的情况下,每个空格后面跟着另一个空格。
(?=(?<=[^\s])\s+)
这意味着从一个前面没有空格字符的点开始拆分,它前面有空格。
如果文本从空格开始,并且您希望在没有文本的第一次拆分中捕获该文本,则可以将表达式修改为以下
(?=(?<=^|[^\s])\s+)
这意味着一系列空格在字符串开始之前需要有一个非空格字符。
答案 1 :(得分:0)
我猜你感兴趣的一些“单词”实际上是空格可以接受的短语。您不能轻易地将空格字符用作短语分隔符和短语本身中的允许字符。请尝试使用逗号代替分隔符:
string updatedLine = "user,input,two words,even three words";
string[] newInput = Regex.Split(updatedLine, @",");
此版本的正则表达式允许在逗号后面有空格:
string updatedLine = "user, input, two words, even three words";
string[] newInput = Regex.Split(updatedLine, @",\s+|,");