我有C#正则表达式问题。解决方案可能非常简单,但我现在无法让它工作。
string type = "ARRAY [0..10,0..20,1..2] OF INT";
Regex regex = new Regex(@"^ARRAY \[(?:(\d+)\.\.(\d+),?)+\]");
var matches = regex.Matches(type);
此代码仅捕获" 1"和" 2",这是数组最后一个维度的范围。我需要捕获所有维度,最好是嵌套格式{{0,10},{0,20},{1,2}}但是因为每个维度总会有两个捕获,所以平面格式{0,10 ,0,20,1,2}也会这样做。
答案 0 :(得分:2)
您已在Captures
中的匹配数据中找到它:
match.Group[1]
.Captures
.Cast<Capture>()
.Select(capture => int.Parse(capture.Value))
.Zip(match.Group[2]
.Captures
.Cast<Capture>()
.Select(capture => int.Parse(capture.Value)),
(min, max) => new { min, max })
每个组都会公开一个Capture
的集合,其中包含所有匹配的实例。
match.Group[1].Captures
包含所有 min 值,而match.Group[2].Captures
包含所有 max 值。上面的代码只是将它们拉在一起以产生您需要的输出。
答案 1 :(得分:2)
答案 2 :(得分:0)
Regex regex = new Regex(@"^ARRAY \[([\d]+[.]{2}[\d]+[,]?)+\]")