c# - 在 C# 中解析自定义文件

标签 c# regex parsing

  1. 我应该使用正则表达式来执行此操作吗?
  2. 可以将结果结构化为可查询、IEnumerable 等。

我有一个文件,我无法更改它的生成方式。我希望创建一个解析器类来提取所有数据。理想情况下,我想使用此类打开文件并让它返回一个我可以使用的可查询数组类型结构。

数据结构如下:

["Table"] = {
    ["Text"] = { 
        ["Number"] = { 
            "Item", --[1]
            "Item", --[2]
            "Item", --[3]
        },
    --repeat--
Note that the actual file has line brakes, tab, etc. (\n\t\t) 
As you will see the patters I use take this into account 
to get different levels.

我有一个为 vb6 为这个文件编写的正则表达式,但是 7 种模式中的 1 种不起作用:

@"^\t\[""([\s\S]*?)""] = {([\s\S]*?)^\t},$

这应该将最顶层 ["Table"] 分组到他们自己的匹配项中。但它返回 0 并且速度很慢。如果我去掉 $ 符号,它也会返回所有子节点。这是唯一阻止我使用正则表达式来执行此操作的因素。

我猜另一种选择就是逐行解析。我确信我可以在给定的时间内解决这个问题,但我想在采取任何一种方式之前听取其他意见。

有什么想法吗?

最佳答案

我会远离正则表达式,如果你想对这样的文件进行任何真实世界的解析,你将很快遇到大量无法调试的正则表达式问题,例如处理正确的嵌套(假设你的文件可以有多个嵌套级别)和正确性会让你非常头疼。有许多模式可以导致任何正则表达式处理器几乎看起来像一个无限循环并且永远不会结束(或者至少不会在任何合理的时间内结束),真正编写这样一个简单的解析器应该很快并且导致更好的调试,性能和可维护性等

关于c# - 在 C# 中解析自定义文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122520/

相关文章:

c# - unity 3D中的反转动画

javascript - 悬停时识别 Javascript 上的单词

带有变量的 Javascript 正则表达式提取

java - 任何用于从电子邮件中提取地址的 Java 库?

c++ - 解析/处理 C++ 文件的选项

java - 固定长度文件中的多个长度="unbounded"

c# - 从 xmlDocument 中选择特定的 xml 节点,然后更改 xml 节点的属性

c# - 在 C# (.NET 4.0) 中填充和播放音频缓冲区

c# - 正则表达式 : Section names with unknown length?

java - 这是正常的 Java 正则表达式行为吗?