Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解析回字符串。格式化输出?_C#_.net_Parsing - Fatal编程技术网

C# 如何解析回字符串。格式化输出?

C# 如何解析回字符串。格式化输出?,c#,.net,parsing,C#,.net,Parsing,我有一个包含string.Format()生成的数据的文件,每行一个,类似于: Class1 [ Property1 = 123, Property2 = 124 ] Class2 [ Property4 = 'ABCD', Property5 = 1234, Property6 = 10 ] Class1 [ Property1 = 2, Property2 = 3 ] Class2 [ Property4 = 'DEFG', Property5 = 2222, Property6 = 19

我有一个包含string.Format()生成的数据的文件,每行一个,类似于:

Class1 [ Property1 = 123, Property2 = 124 ]
Class2 [ Property4 = 'ABCD', Property5 = 1234, Property6 = 10 ]
Class1 [ Property1 = 2, Property2 = 3 ]
Class2 [ Property4 = 'DEFG', Property5 = 2222, Property6 = 19 ]
等等

我需要重新解析它们以获得类的实例

鉴于我有用于生成这些行的原始string.Format模板,获取原始值的最快方法是什么,以便我可以构建
Class1
Class2
的实例(这里的fast指的是开发人员的时间)?

PS:我可以相信,根据模板,所有输入字符串都是“格式良好的”。

PPS:我知道使用JSON会使这更简单,但现在我不能。此外,我也知道,但我正在寻找更快的方法(如果可能)。

只要字符串不包含特殊字符,下面是一个开始:

        var str = "Class1 [ Property1 = 123, Property2 = 124 ]";
        var m = Regex.Match(str, @"^(?<name>[^ ]+) \[ ((?<prop>[^ ]+) = (?<val>[^ ,]+),? )+\]$");
        Console.WriteLine(m.Groups["name"].Value);
        for (var i = 0; i < m.Groups["prop"].Captures.Count; i++)
        {
            Console.WriteLine(m.Groups["prop"].Captures[i].Value);
            Console.WriteLine(m.Groups["val"].Captures[i].Value);
        }

如果字符串确实包含特殊字符,则可以使用更复杂的正则表达式,或者需要在状态机中逐个字符地解析字符串。第一种情况我无法回答,因为您没有提供字符串可以包含或不能包含的确切规则。第二种情况我不能回答,因为它太复杂了。

具体的问题是…?我怎样才能做这样的分析@阿德里亚诺:“恢复原始值的最快方法是什么,这样我就可以恢复Class1和Class2的实例。”贾科莫,我有点讽刺。若你们不提供自己的代码,那个么这个问题就太广泛了。我想标记器在这里可以很好地工作(如果您不需要具有“深奥”性能的东西,可以进行一些反射)。对我来说,它看起来非常具体:我提供了一个要解析的示例,我说我已经将模板传递到string.Format。我可以自己写代码,我只需要一些提示,因为使用反讽有点过分。你是说反序列化吗?没有特殊字符。我考虑过regex,但我希望存在与string.Format相反的格式。
Class1
Property1
123
Property2
124