繁体   English   中英

使用Regex和C#分割字符串并添加到列表

[英]Splitting a string and adding to list using Regex and C#

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

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

我如何将字符串分成5个单词,然后将每个字符串都添加到列表中,这样它就成为字符串列表(每个字符串包含5个单词)。 我认为列表会更好,因为字符串中的单词数可以变化,因此列表可以相应地增加或缩小。

我尝试使用Regex通过下面的代码行获取前5个字:

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

但不确定如何继续进行,以及如何动态,稳健地添加到列表中。 我想正则表达式可以进一步提供帮助,或者提供一些很棒的字符串/列表功能? 你能指导我一点吗?

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

var listOfWords = Regex.Matches(a_string, @"(\w+\s+){1,5}")
     .Cast<Match>()
     .Select(i => i.Value.Trim())
     .ToList();

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

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)));

您可以使用简单

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++;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM