我想阅读下面的文本文件。 它有几何名称 - > " hvac,OUTLET,INLET,Lamelle,duct and wall"
在这种情况下只有6,但我可能会根据CFD过程的不同模拟而有所不同。
我想只提取几何名称及其对应的'类型'。在我的例子中,几何和类型是" hvac,OUTLET,INLET,Lamelle,duct and wall"和"墙和补丁"分别
我应该使用Parse使用Parse还是只在' {\ n'之后搜索字符串和'} \ n'关键字。
geometry
{
hvac
{
type wall;
inGroups 1(wall);
nFaces 904403;
startFace 38432281;
}
OUTLET
{
type patch;
nFaces 8228;
startFace 39336684;
}
INLET
{
type patch;
nFaces 347;
startFace 39344912;
}
Lamelle
{
type wall;
inGroups 1(wall);
nFaces 204538;
startFace 39345259;
}
duct
{
type wall;
inGroups 1(wall);
nFaces 535136;
startFace 39549797;
}
wall
{
type wall;
inGroups 1(wall);
nFaces 118659;
startFace 40084933;
}
}
答案 0 :(得分:0)
答案取决于您是否要支持整个OpenFOAM的字典格式。
如果您只需要支持与问题中显示的格式类似的格式,那么像\b(\w+)\s+{\s+type\s+(\w+);
这样的简单正则表达式可以执行:https://regex101.com/r/yV8tK2/1。如果您完全控制如何创建此词典,这可以是您的选择,但在这种情况下,您可以更简单地直接从创建词典的代码中获取所需信息。
然而,OpenFOAM的字典格式比你的例子丰富得多。它可以允许#include
指令,允许正则表达式作为键,可以允许使用$
语法引用其他键,可以允许注释,C ++代码片段以及可能更多(我不假装要好好了解)。一个典型的例子可以是两个词典:
---- File data.incl:
baseType wall;
---- File data
#inputMode merge;
#include "data.incl"
geometry {
/* foo {
type wrongType; // a commented entry
} */
foo {
type $baseType; // this will expand to wall
...
}
"(bar|buz)" { // this will match bar and buz
...
}
}
如果你需要解析任何这样的字典,那么我强烈建议你用C ++编写代码并使用标准的OpenFOAM类,这样你就可以用几行代码来完成这个。