C#安全文件解析/解析策略

时间:2012-06-27 16:52:44

标签: c# parsing

这可能是一个新手问题:

如果看起来像这样解析texfile的最聪明方法是什么:

material polygon name
0
0
9
            -7          4.5         0
            -7          9.166667            0
            -2.333333           4.5         0

我只对9 xyz值感兴趣。但是,我不知道一种安全的方法来过滤掉它们,因为有时候信息写在一行中就像这样:

material polygon name 0 0 9 -7 4.5 0 -7 9.166667 0 -2.333333 4.5 0

有时它用空格分隔,有时带有制表符。 我想0 0 9表示后面有9个值。 到目前为止,我只学习了使用.Split(' ')

解析TXT文件
            System.IO.StreamReader reader = new System.IO.StreamReader(_file);
            string ln = reader.ReadLine();

            while (ln != null)
            {
                if (ln != null && ln[0] != '#')
                {
                    string[] lnsplit = ln.Split(' ');
                    double X = lnsplit[bla];
                    double Y = lnsplit[bla+1];
                    double Z = lnsplit[bla+2];
                }
                ln = occreader.ReadLine();
            }
            occreader.Close();

但这当然只有在文件严格结构化的情况下才有效。

2 个答案:

答案 0 :(得分:1)

我会使用启用了RegexOptions.SingleLine的正则表达式。就像是 ^material polygon name (?:\d\s*){3}(?:(-?\d+(?:\.\d+)?)\s*){9}$

\s运算符包含多行,您可以使用生成的Match对象来提取所需的九个值。 (来自Captures的{​​{1}}属性。

答案 1 :(得分:0)

使用与浮点数匹配的正则表达式,例如,请参阅this question。 然后只需调用Regex.Match并跳过前三场比赛。