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

しかし、さらに進んで動的かつ堅牢にリストに追加する方法については少しわかりません。正規表現がさらに役立つと思いますか、それとも素晴らしい文字列/リスト関数ですか?少し案内してもらえますか?

最終的には、list [0]に「1、2、3、4、5」、list [1]に「6、7など」などを含めたいと思います。ありがとうございます。

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()IEnumerable<T>オブジェクトをリストに変換するためのLINQ拡張メソッドです(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 に答える