Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式和C拆分字符串并添加到列表_C#_Regex_String - Fatal编程技术网

C# 使用正则表达式和C拆分字符串并添加到列表

C# 使用正则表达式和C拆分字符串并添加到列表,c#,regex,string,C#,Regex,String,我有一个字符串,其中的字数可能会有所不同。比如: string a_string = " one two three four five six seven etc etc etc "; 如何将字符串拆分为5个单词,并将每个单词添加到列表中,使其成为一个字符串列表,每个字符串包含5个单词。我认为列表会更好,因为字符串中的字数可以变化,所以列表可以相应地增加或减少 我尝试使用正则表达式通过下面的代码行获取前5个单词: Regex.MatchrawMessage,@\w+\s+{5}.ToStr

我有一个字符串,其中的字数可能会有所不同。比如:

string a_string = " one two three four five six seven etc etc etc "; 
如何将字符串拆分为5个单词,并将每个单词添加到列表中,使其成为一个字符串列表,每个字符串包含5个单词。我认为列表会更好,因为字符串中的字数可以变化,所以列表可以相应地增加或减少

我尝试使用正则表达式通过下面的代码行获取前5个单词:

Regex.MatchrawMessage,@\w+\s+{5}.ToString.Trim

但有点不确定如何进一步,并添加到列表动态和稳健。我想正则表达式可以提供进一步的帮助,或者一些很棒的字符串/列表函数?你能给我引路吗

最后,我希望列表[0]包含一二三四五,列表[1]包含六七等等。。谢谢

您可以使用简单的

a_string.Split(' ');
然后循环遍历生成的数组并根据需要填充列表,例如

int numOfWords = 0;
int currentPosition = 0;
foreach (var str in a_string.Split(' '))
{
   if (numOfWords == 5)
   {
     numOfWords = 0;
     currentPosition++;
   }
   list[currentPosition] += str;
   numOfWords++;
}

单词拆分不需要正则表达式,字符串提供了以下功能:

var list = str.Split(' ').ToList();
ToList是一种LINQ扩展方法,用于将IEnumerable对象转换为列表拆分方法返回字符串数组

要按5个单词对列表进行分组,请使用以下代码段:

var res = list
    .Select((s, i) => new { Str = s, Index = i })
    .GroupBy(p => p.Index/5)
    .Select(g => string.Join(" ", g.Select(v => v.Str)));

@Tigran最后的聚合是第二个子问题,他想如何重新聚合还不清楚。很明显,如果拆分为列表,OP将无法转换结果。@Tigran有关如何在没有循环的情况下进行重新分组的示例,请查看我的更新。它适用于ListoWords[0],但我无法通过ListoWords[1]等访问其余单词。。如果字符串包含100个单词,我希望从ListoWords[0]到ListoWords[19]有20个5个单词的字符串。此外,如果有97个单词,那么它将是相同的,只是listOfWords[19]只得到2个单词。有什么帮助吗?谢谢。获取ListoWords[1]效果很好,我将更改代码以覆盖97个单词。对于ListoWords[1],我获取的索引超出范围。必须为非负数且小于集合的大小。参数名称:索引:-/你用的是Regex.Matches,不是Regex.Matche吗?我用的是原样,即Regex.Matches。
var listOfWords = Regex.Matches(a_string, @"(\w+\s+){1,5}")
     .Cast<Match>()
     .Select(i => i.Value.Trim())
     .ToList();