2

我有一个字符串,其中单词的数量可能会有所不同。喜欢:

string a_string = " one two three four five six seven etc etc etc "; 

如何将字符串拆分为每个 5 个单词,并将每个单词添加到列表中,使其成为字符串列表(每个字符串包含 5 个单词)。我认为列表会更好,因为字符串中的单词数量可能会有所不同,因此列表可以相应地增长或缩小。

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

Regex.Match(rawMessage, @"(\w+\s+){5}").ToString().Trim();

但有点不确定如何进一步进行并动态且稳健地添加到列表中。我想 Regex 可以进一步提供帮助,或者一些很棒的字符串/列表函数?你能指导我一下吗?

最终,我希望 list[0] 包含“一二三四五”,而 list[1] 包含“六七等”,依此类推。谢谢。

4

3 回答 3

4
var listOfWords = Regex.Matches(a_string, @"(\w+\s+){1,5}")
     .Cast<Match>()
     .Select(i => i.Value.Trim())
     .ToList();
于 2012-08-09T08:06:39.047 回答
1

拆分单词不需要正则表达式,字符串提供了这种能力:

var list = str.Split(' ').ToList();

ToList()是一种 LINQ 扩展方法,用于将IEnumerable<T>对象转换为列表(Split()方法返回字符串数组)。

要按 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)));
于 2012-08-09T08:06:15.690 回答
0

你可以使用简单的

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++;
}
于 2012-08-09T08:05:49.177 回答