我有一个字符串“word1 word2 word3 word4 word5”
我想将其分成以下数组: “word1 word2”| “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”
正则表达式对每个Nth []分割字符串的帮助吗?
答案 0 :(得分: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 );
}
<强>假设:强>
模式说明:
([^\s]+\s+[^\s]+)\s*
- 捕获word-&gt; whitespace-&gt; word-&gt;可选空格(可选,因为Trim()
中的PrintWordGroups()
操作导致最后一个表达式不具备该空格)。([^\s]+\s+){2}
表示:捕获word-&gt;空白两次,然后用另一个单词结束,然后是可选的空格。string.Format( @"(([^\s]+\s+){{{0}}}[^\s]+)\s*", n - 1 )
(([^\s]+\s+){5}[^\s]+)\s*
。