我正在使用以下正则表达式
JOINTS.*\s*(?:(\d*\s*\S*\s*\S*\s*\S*)\r\n\s*)*
关于以下类型的数据:
JOINTS DISPL.-X DISPL.-Y ROTATION
1 0.000000E+00 0.975415E+01 0.616921E+01
2 0.000000E+00 0.000000E+00 0.000000E+00
思路是提取两组,每组包含一行(以Joint Number开头,1、2等)C#代码如下:
string jointPattern = @"JOINTS.*\s*(?:(\d*\s*\S*\s*\S*\s*\S*)\r\n\s*)*";
MatchCollection mc = Regex.Matches(outFileSection, jointPattern );
foreach (Capture c in mc[0].Captures)
{
JointOutput j = new JointOutput();
string[] vals = c.Value.Split();
j.Joint = int.Parse(vals[0]) - 1;
j.XDisplacement = float.Parse(vals[1]);
j.YDisplacement = float.Parse(vals[2]);
j.Rotation = float.Parse(vals[3]);
joints.Add(j);
}
但是,这不起作用:它不是返回两个捕获的组(内部组),而是返回一个组:整个块,包括列标题。为什么会这样?C# 是否以不同的方式处理未捕获的组?
最后,RegExes 是最好的方法吗?(我真的觉得我现在有两个问题。)