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

C#安全文件解析/解析策略,c#,parsing,C#,Parsing,这可能是一个新手问题: 解析Texif文件最聪明的方法是什么,如下所示: material polygon name 0 0 9 -7 4.5 0 -7 9.166667 0 -2.333333 4.5 0 material polygon name 0 0 9 -7 4.5 0 -7 9.166667 0 -2.

这可能是一个新手问题:

解析Texif文件最聪明的方法是什么,如下所示:

material polygon name
0
0
9
            -7          4.5         0
            -7          9.166667            0
            -2.333333           4.5         0
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
material polygon name 0 0 9 -7 4.5 0 -7 9.166667 0 -2.333333 4.5 0
有时用空格分隔,有时用制表符分隔。 我猜
09
表示下面有9个值。 到目前为止,我只学会了用
.Split(“”)


但这当然只有在文件结构严格的情况下才起作用。

我会使用正则表达式并启用
RegexOptions.SingleLine
。差不多
^材质多边形名称(?:\d\s*){3}(?:(-)\d+(?:\。\d+)\s*){9}$


\s
操作符覆盖多行,您可以使用生成的
Match
对象提取所需的九个值。(从
捕获
组[1]

属性中,使用与浮点数匹配的正则表达式,例如,请参见。

然后只需调用Regex.Match并跳过前三个匹配项。

“将最后一部分重复九次”?DRY也适用于正则表达式。使用
模式{x}
,或
模式{x,y}
.hmm..regex似乎是一个不错的选择…你能解释一下如何更好地定义一个模式吗?我如何定义一个模式,比如:string int 9xdouble?非常感谢你的帮助advance@timkado看看我评论中的链接,玩得开心。这里有一个专门为Regex开发的网站:另外,让Regex教练试试,这是一个很棒的piec软件开发。