2012-03-13 154 views
1

我有一個字符串「字詞1字詞2 WORD3 word4的word5」.NET正則表達式將字符串分割成詞對

我想拆分成數組: 「字詞1字詞2」 | 「word2 word3」| 「word3 word4」| 「word4的word5」

我可以使用.NET分裂和循環做到這一點,但我寧願使用Regex.Split

這裏正則表達式做它的工作分裂和循環:

Dim keywordPairArr As String() = Regex.Split(Trim(keywords), "[ ]") 
For i As Integer = 0 To keywordPairArr.Length - 2 
    Dim keyword As String = keywordPairArr(i) & " " & keywordPairArr(i + 1) 
    If Not keywordDictionary.ContainsKey(keyword) Then 
     keywordDictionary.Add(keyword, Regex.Matches(keywords, "[" & keyword & "]+").Count) 
    End If 
Next 

獎勵:每個第N個單詞都會很好。 N = 3會輸出「word1 word2 word3」| 「word2 word3 word4」| 「word3 word4 word5」

正則表達式的任何幫助,以每N []分割字符串?

+0

好。回到正則表達式解決方案。 – 2012-03-13 17:05:45

回答

2

您可以使用Regex.Matches()執行此任務。

下面是將輸出結果的C#示例:

void PrintWordGroups(string input, string pattern) 
{ 
    MatchCollection mc = Regex.Matches(input.Trim(), pattern); 
    foreach (Match m in mc) 
    { 
     Trace.WriteLine(m.ToString()); 
    } 
} 

void PrintGroupsOf2(string input) 
{ 
    PrintWordGroups(input, @"([^\s]+\s+[^\s]+)\s*"); 
} 

void PrintGroupsOf3(string input) 
{ 
    PrintWordGroups(input, @"(([^\s]+\s+){2}[^\s]+)\s*"); 
} 

void PrintGroupsOfN(string input, int n) 
{ 
    string pattern = string.Format(@"(([^\s]+\s+){{{0}}}[^\s]+)\s*", n - 1); 
    PrintWordGroups(input, pattern); 
} 

假設:

  • 的字由空格分隔。
  • 輸入中的單詞數必須乘以組中的單詞數(例如,3,6,9,12等,對於3個單詞組)。

模式說明:

  1. ([^\s]+\s+[^\s]+)\s* - 捕捉字處理> whitespace->字處理>可選空白(可選的,因爲最後一個表達式將不是有因PrintWordGroups()Trim()操作) 。
  2. ([^\s]+\s+){2}意思是:捕獲word-> whitespace兩次,然後用另一個單詞和可選的空白完成。
  3. string.Format(@"(([^\s]+\s+){{{0}}}[^\s]+)\s*", n - 1)
    這是捕獲N-1個單詞+空格然後以第N個單詞和可選空白結束的一般情況。
    例如,如果n = 6,格式化的字符串將是:(([^\s]+\s+){5}[^\s]+)\s*
相關問題