如果我想使用正则表达式查找字符串中括号内的所有文本,我会这样:
string text = "[the] [quick] brown [fox] jumps over [the] lazy dog";
Regex regex = new Regex(@"\[([^]]+)\]");
MatchCollection matches = regex.Matches(text);
foreach (Match match in matches)
{
... // Here is my problem!
}
我不确定如何从此处继续我的代码,如果我只是遍历所有匹配项,我会得到"the"
,"quick"
,"fox"
和"the"
,我希望将两个the
分组在同一个Match.Group
中,只是在不同的索引处。
我真正想要的是让两个"the"
以这样的方式分组,我可以找到所有出现的同一个词及其索引。 < / p>
我希望API会给我这样的东西:
foreach (Match match in matches)
{
for (int i = 1; i < match.Groups.Count; i++)
{
StartIndexesList.Add(match.Groups[i].Index);
}
}
每个match.Group
将在某个找到的令牌的文本中保存对同一事件的引用,所以我希望此代码会立即将所有the
文本索引引用添加到列表中,但是它没有,它只是为每个单独的事件添加,而不是一次性添加。
如果没有对所有令牌进行后期处理以查看是否有重复的令牌,我怎样才能实现这一目标?
答案 0 :(得分:1)
这是你在找什么?
string text = "[the] [quick] brown [fox] jumps over [the] lazy dog";
Regex regex = new Regex(@"\[([^]]+)\]");
MatchCollection matches = regex.Matches(text);
foreach (IGrouping<string, Match> group in matches.Cast<Match>().GroupBy(_ => _.Value))
{
Console.WriteLine(group.Key); // This will print '[the]'
foreach (Match match in group) // It will iterate through all matches of '[the]'
{
// do your stuff
}
}