2012-03-13 177 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*
相关问题