2012-08-09 82 views
1

我有一個字符串,其中的字數可能會有所不同。像:使用正則表達式和C分割字符串並添加到列表#

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

我如何分割字符串到每個5個字,而且每個都將其添加到列表,使得它成爲字符串列表(含5個字每個字符串)。我認爲列表會更好,因爲字符串中的單詞數量可能會有所不同,因此列表可以相應地增加或減少。

我嘗試使用正則表達式通過下面的代碼行獲得第5個字:

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

,但一下就如何進一步進行,並添加動態和強勁列出不確定。我猜正則表達式可以進一步幫助,或者一些很棒的字符串/列表功能?你能指導我一下嗎?最後,我想列表[0]包含「一個兩個三個四個五」和列表[1]包含「六個七等等等等等等」,等等..謝謝。

回答

1

拆分的話不需要正則表達式,字符串提供了此功能:

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

ToList()是一個LINQ extensi on方法將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))); 
+1

這不是他的要求其實..他在最後要求聚集.. – Tigran 2012-08-09 08:07:20

+0

@Tigran聚集最後是第二個子問題,而且他不清楚他想如何重新聚合。很明顯,如果將分割結果轉換爲列表,則OP難以將結果轉換。 – dasblinkenlight 2012-08-09 08:11:52

+0

@Tigran有關如何在沒有循環的情況下重新分組的示例,請查看我的更新。 – dasblinkenlight 2012-08-09 08:20:40

0

您可以使用簡單的

a_string.Split(' '); 

然後循環throught結果數組,並填寫您的列表,只要你想,例如

int numOfWords = 0; 
int currentPosition = 0; 
foreach (var str in a_string.Split(' ')) 
{ 
    if (numOfWords == 5) 
    { 
    numOfWords = 0; 
    currentPosition++; 
    } 
    list[currentPosition] += str; 
    numOfWords++; 
} 
3
var listOfWords = Regex.Matches(a_string, @"(\w+\s+){1,5}") 
    .Cast<Match>() 
    .Select(i => i.Value.Trim()) 
    .ToList(); 
+0

它適用於listOfWords [0],但我無法通過listOfWords [1]等訪問剩餘的單詞。如果該字符串包含100個單詞,我希望每個單詞有20個字符串從listOfWords [0]到listOfWords [19]。另外,如果有97個單詞,那麼它將是相同的,只不過listOfWords [19]只有2個單詞。任何幫助?謝謝。 – 2012-08-09 08:21:12

+0

它能正常工作以獲得'listOfWords [1]',我將更改代碼以覆蓋97個單詞。 – Charlie 2012-08-09 08:31:50

+0

for listOfWords [1],我得到「索引超出範圍,必須是非負數,小於集合的大小。」 參數名稱:索引「。 : -/ – 2012-08-09 08:42:42