【发布时间】:2012-03-27 23:04:02
【问题描述】:
PyParsing 新手。我正在尝试解决如何解析 xdot 文件中的绘图(和类似)属性。有许多项目的后续元素的数量在开始时以整数形式给出 - 类似于 NetStrings。我查看了一些示例代码来处理类似网络字符串的构造,但它似乎对我不起作用。
以下是一些示例:
3个点的多边形(P后面的3表示跟随的点数):P 3 811 190 815 180 806 185应该解析为'P', [[811, 190], [815, 180], [806, 185]]
具有 2 个点的多边形:P 2 811 190 815 180 806 185 应解析为 'P', [[811, 190], [815, 180]](末尾带有未解析的文本)
笔填充颜色(C后面的4表示'-'后面要消耗的字符数):C 4 -blue应该解析为'C', 'blue'
更新信息:
我认为我在没有更多上下文的情况下将这些示例放在自己的行中是一种误导。这是一个真实的例子:
S 5 -solid S 15 -setlinewidth(1) c 5 -black C 5 -black P 3 690 181 680 179 687 187
请参阅http://www.graphviz.org/doc/info/output.html#d:xdot 了解实际规格。
请注意,文本字段中可能存在大量空格 - 上面的 setlinewidth(1) 可以是“abcd efgh hijk”,只要它正好是 15 个字符,就应该与“S”标签链接。在“P”标签之后应该正好有 7 个数字(初始计数器 + 3 对),其他任何东西都应该引发解析错误,因为后面可能有更多标签(在同一行上),但数字本身不是有效。
希望这能让事情变得更清楚一些。
【问题讨论】:
-
经过一番思考,我想出了一个答案(如下所示)。仍然很想听听其他意见,如果有更好的方法。尽管如此,我对 PyParsing 还是很满意——即使我下面的结果(仍然有点“手动”)比“手工”编写(和阅读)要容易得多。
-
所以
P 2 811 190 815 180 806 185引发了一个解析错误,不像您之前所说的“末尾有未解析的文本”? -
@Hooked:很抱歉 - 我试图让事情保持简单,当我自己测试时,得到我想要的结果而不担心解析是有意义的错误。但是
S 5 -solid P 1 690 181 680 179 C 4 -blue确实应该在 680 处给出解析错误(我认为是第 24 列)。
标签: pyparsing