我有这段代码:
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 }
。
答案 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 }