无法获取所有群组项目

时间:2013-12-31 19:55:55

标签: c# regex

我有这段代码:

string dupa = @"<div>dupa puda</div><div>udpa apad dpau</div><div>dupa</div>";
Regex test = new Regex(@"<div>(\s*?(\b[dupa]*\b))*?\s*</div>", RegexOptions.Singleline);
var allDefs = test.Matches(dupa);

当我查看Matches数组(allDefs)时,组看起来像这样:

{  
  <div>dupa puda</div>, -> matching all
   puda, -> matching (\s*?(\b[dupa]*\b)) group
  puda -> matching (\b[dupa]*\b)
}

所以,我松了dupa。我需要的是找到匹配(\b[dupa]*\b)的所有单词,但我可以得到最后一个匹配模式的单词。有没有办法为第一场比赛获得值{ dupa, puda }

1 个答案:

答案 0 :(得分:2)

它确实捕获了内部组的所有重复,但您必须检查Captures集合以获取所有这些重复。例如:

foreach (Match m in allDefs)
{
    foreach (Capture c in m.Groups[2].Captures)
    {
        Console.WriteLine(c.Value);
    }

    Console.WriteLine("----");
}

产生输出

dupa
puda
----
udpa
apad
dpau
----
dupa
----

或者如果你想使用一点Linq:

var words = 
    from Match m in allDefs
    from Capture c in m.Groups[2].Captures
    select c.Value;
// { dupa , puda , udpa , apad , dpau , dupa }