如何获得相同的正则表达式匹配组合
本文关键字:组合 正则表达式 何获得 | 更新日期: 2023-09-27 18:18:34
如果我想使用正则表达式查找字符串中括号内的所有文本,我会像这样:
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"
分组,这样我就可以找到中所有出现的相同单词及其索引。
我希望API会给我这样的东西:
foreach (Match match in matches)
{
for (int i = 1; i < match.Groups.Count; i++)
{
StartIndexesList.Add(match.Groups[i].Index);
}
}
其中每个match.Group
将保存对某些找到的令牌文本中相同事件的引用,所以我期望这段代码将立即将所有the
文本索引引用添加到列表中,但它没有,它只是为每个单独的事件添加,而不是一次全部添加。
我如何实现这一点,而不后处理所有令牌,看看是否有重复的?
这是你要找的吗?
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
}
}