C# 将字符串拆分为数组

C# 将字符串拆分为数组,c#,regex,linq,C#,Regex,Linq,我想将一个字符串拆分为一个子字符串数组。字符串由空格分隔,但子字符串中也可能出现空格。和拼接的字符串必须具有相同的长度 例如: "a b aab bb aaa" -> "a b", "aab", "bb ", "aaa" 我有以下代码: var T = Regex.Split(S, @"(?<=\G.{4})").Select(x => x.Substring(0, 3)); var T=Regex.Split(S,@)(?您可以使用相同的正则表达式,但通过在字符串中插入

我想将一个字符串拆分为一个子字符串数组。字符串由空格分隔,但子字符串中也可能出现空格。和拼接的字符串必须具有相同的长度

例如:

"a b aab bb  aaa" -> "a b", "aab", "bb ", "aaa"
我有以下代码:

var T = Regex.Split(S, @"(?<=\G.{4})").Select(x => x.Substring(0, 3));

var T=Regex.Split(S,@)(?您可以使用相同的正则表达式,但通过在字符串中插入所需的数字来“参数化”它

在C#6.0中,您可以这样做:

var n = 5;
var T = Regex.Split(S, $@"(?<=\G.{{{n}}})").Select(x => x.Substring(0, n-1));

使用LINQ似乎相当容易:

var source = "a b aab bb  aaa";

var results =
    Enumerable
        .Range(0, source.Length / 4 + 1)
        .Select(n => source.Substring(n * 4, 3))
        .ToList();
或者使用Microsoft的反应式框架团队的交互式扩展(NuGet“Ix Main”),并执行以下操作:

var results =
    source
        .Buffer(3, 4)
        .Select(x => new string(x.ToArray()))
        .ToList();

两者都能提供所需的输出。

A lookback
(?是否要自动检测子字符串的长度?否,长度存储在变量中。使用字符串插值更方便。是否应该更改子字符串函数的参数?@RichardSchneider是的,这是我最喜欢的语言添加内容。@RichardSchneider另一方面,如果你想一旦你用这个整洁的
$
东西替换了
string.Format
,就可以本地化插值字符串。@UweKeim我强烈怀疑插值字符串是用于本地化的。这对于字符串没有呈现给最终用户的东西非常好,例如诊断、从元数据生成SQL等等。谢谢,这段代码对于我来说,
var results=Enumerable.Range(0,(source.Length/(n+1))+1)。选择(x=>source.Substring(x*n,n-1)).ToArray();
var results =
    source
        .Buffer(3, 4)
        .Select(x => new string(x.ToArray()))
        .ToList();
var n = 3;
var S = "a b aab bb  aaa";
var regex = @"(?<=\G.{" + n + @"}) ";
var T = Regex.Split(S, regex);