次の正規表現を使用しています
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
アイデアは、2 つのグループを抽出することです。それぞれに行が含まれています (ジョイント番号、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);
}
ただし、これは機能しません。キャプチャされた 2 つのグループ (内側のグループ) を返すのではなく、1 つのグループ (列ヘッダーを含むブロック全体) を返します。なぜこれが起こるのですか?C# は、キャプチャされていないグループを別の方法で処理しますか?
最後に、正規表現はこれを行うための最良の方法ですか? (私は今、2つの問題を抱えているように感じています。)