![](/img/trans.png)
[英]Regex.Split string into substrings by a delimiter while preserving whitespace
[英]Regex.Split() sentence to words while preserving whitespace
我正在使用Regex.Split()
來獲取用戶輸入並將其轉換為列表中的單個單詞,但此時它會刪除它們添加的任何空格,我希望它保留空白。
string[] newInput = Regex.Split(updatedLine, @"\s+");
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+)
這意味着一系列空格在字符串開始之前需要具有非空格字符。
我猜你感興趣的一些“單詞”實際上是空格可以接受的短語。 您不能輕易地將空格字符用作短語分隔符和短語本身中的允許字符。 請嘗試使用逗號作為分隔符:
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+|,");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.