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

时间:2011-11-20 20:03:40

标签: c# regex split

我正在使用Regex.Split()来获取用户输入并将其转换为列表中的单个单词,但此时它会删除它们添加的任何空格,我希望它能保留空白。

string[] newInput = Regex.Split(updatedLine, @"\s+");

2 个答案:

答案 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+|,");