我希望这些C#行:
var regex = new Regex("A(bC*)*");
var match = regex.Match("AbCCbbCbCCCCbbb");
var groups = match.Groups;
返回类似的内容:
["AbCCbbCbCCCCbbb", "A", "bCC", "b", "bC", "bCCC", "b", "b", "b"]
但它只返回最后一次捕获的匹配:
["AbCCbbCbCCCCbbb", "b"]
Here Regex101还会显示以下警告:
重复捕获组仅捕获最后一次迭代。如果您对数据不感兴趣,请在重复组周围放置捕获组以捕获所有迭代或使用非捕获组
我应该如何更改正则表达式?
答案 0 :(得分:2)
也许试试这个:
A|b(C+)?
在Notepad++
编辑:如果您希望此模式包含组:
(A)|(b(C+)?)
答案 1 :(得分:2)
如果您还要捕获A
,请使用括号括起来:new Regex("(A)(bC*)*")
。请参阅regex demo。
然后,收集CaptureCollection内所有的值:
var regex = new Regex("(A)(bC*)*");
var match = regex.Matches("AbCCbbCbCCCCbbb")
.Cast<Match>()
.SelectMany(x => x.Groups.Cast<Group>()
.SelectMany(v => v.Captures
.Cast<Capture>()
.Select(t => t.Value)
)
)
.ToList();
foreach (var s in match)
Console.WriteLine(s);
请参阅C# demo