.NET正则表达式将字符串分割成词对
问题描述:
我有一个字符串“字词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 []分割字符串?
答
您可以使用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个单词组)。
模式说明:
-
([^\s]+\s+[^\s]+)\s*
- 捕捉字处理> whitespace->字处理>可选空白(可选的,因为最后一个表达式将不是有因PrintWordGroups()
的Trim()
操作) 。 -
([^\s]+\s+){2}
意思是:捕获word-> whitespace两次,然后用另一个单词和可选的空白完成。 -
string.Format(@"(([^\s]+\s+){{{0}}}[^\s]+)\s*", n - 1)
这是捕获N-1个单词+空格然后以第N个单词和可选空白结束的一般情况。
例如,如果n = 6,格式化的字符串将是:(([^\s]+\s+){5}[^\s]+)\s*
。
好。回到正则表达式解决方案。 – 2012-03-13 17:05:45