C# 新手需要知道如何像这样解析整个文本组

C# 新手需要知道如何像这样解析整个文本组,c#,.net,C#,.net,我需要解析一个包含10000个分组的文本文件 group "C_BatTemp" -- block-group { block: "Constant" flags: BLOCK|COLLAPSED } -- Skipping output Out1 p_untitled_P_real_T_0[1] { type: flt(64,IEEE)* alias: "Value" flags: PARAM } endgroup

我需要解析一个包含10000个分组的文本文件

group "C_BatTemp" -- block-group
{
 block: "Constant"
 flags: BLOCK|COLLAPSED
}
    -- Skipping output Out1
    p_untitled_P_real_T_0[1]
    {
     type:    flt(64,IEEE)*
     alias:   "Value"
     flags: PARAM
    }

endgroup -- block-group "C_BatTemp"
    string Varname = "C_BatTemp";
    string GroupType = "Constant";
    string BaseAdressName = "p_untitled_P_real_T_0";
    int AdressOffset = 1; // number in parenthesis p_untitled_P_real_T_0[1]<----
    string VarType = "flt(64, IEEE)";
    bool IsPointer = true; // true if VarType is "flt(64, IEEE)*" , 
    //false if "flt(64, IEEE)"        
    string VarAlias = "Value";
我希望解析器填充的所需对象如下所示

group "C_BatTemp" -- block-group
{
 block: "Constant"
 flags: BLOCK|COLLAPSED
}
    -- Skipping output Out1
    p_untitled_P_real_T_0[1]
    {
     type:    flt(64,IEEE)*
     alias:   "Value"
     flags: PARAM
    }

endgroup -- block-group "C_BatTemp"
    string Varname = "C_BatTemp";
    string GroupType = "Constant";
    string BaseAdressName = "p_untitled_P_real_T_0";
    int AdressOffset = 1; // number in parenthesis p_untitled_P_real_T_0[1]<----
    string VarType = "flt(64, IEEE)";
    bool IsPointer = true; // true if VarType is "flt(64, IEEE)*" , 
    //false if "flt(64, IEEE)"        
    string VarAlias = "Value";
解析这个的最佳方法是什么


我该怎么开始呢?

最近我不得不做类似的事情

将每个数据块分解为记录这些是您的“组”吗?。使用正则表达式从每条记录中提取所需的每个元素


如果对数据没有更清晰的概念,我无法详细说明。

一种解决方案可能是使用正则表达式。我很快就做了一个,但它可能需要一些额外的调整,以满足您的确切需要。它适用于您的示例,但对于其他输入可能会失败。表达式非常适合给定的示例,特别是在换行符和注释方面

代码


我认为您需要添加更多关于您试图解析的语言语法的细节。哪里需要支架?看起来这个序列——引入了注释——是真的吗?看起来,您可能能够使用某种有限状态自动机(例如regex)来解析这个问题,但根据语言的规则,您可能需要一个更复杂的lexer。