PyParsing的新功能。我试图解决如何解析xdot文件中的绘制(和类似)属性。有许多项目在开始时以整数形式给出了以下元素的数量 - 类似于NetStrings。我已经看过一些示例代码来处理类似构造的网络字符串,但它似乎不适合我。解析xdot使用pyparsing绘制属性
这里有一些样品:
多边形用3点(3 P表示的点的以下的数后):
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]]
(未解析文本末尾)
笔填色(后4位C表示数字之后的字符“ - ”消费):
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非常满意 - 即使我的结果如下(仍然有点“手动”),比手工编写(和阅读)要容易得多。 – 2012-03-28 10:40:54
因此'P 2 811 190 815 180 806 185'会产生一个解析错误,而不是像之前所说的“最后未解析的文本”? – Hooked 2012-03-28 15:51:27
@Hooked:抱歉 - 我试图让事情变得简单,当我只是在自己测试一些东西时,只是为了得到我期待的结果而不用担心解析错误。但是'S 5 -solid P 1 690 181 680 179 C 4 -blue'应该在680(我认为是第24列)中给出了一个解析错误。 – 2012-03-28 22:19:14