1

这是我尝试使用 pyparsing 解析的 DSL 片段

我有一个格式的字符串<keyword> 02 01 30 03 40 20 10
其中 字符串
02的数量
01是 string1 的长度(以字节为单位)
30是 string1 本身
03是 string2 的长度(以字节为单位)
40 20 10是 string2

如何使用 pyparsing 标记这个字符串?

4

1 回答 1

1

所以它是 countedArray 的 countedArray?你试过了吗:

from pyparsing import Word,nums,alphas,countedArray

test = "key 02 01 30 03 40 20 10"

integer = Word(nums)

# each string is a countedArray of integers, and the data is a counted array
# of those, so...
lineExpr = Word(alphas)("keyword") + countedArray(countedArray(integer))("data")

# parse the test string, showing the keyworod, and list of lists for the data
print lineExpr.parseString(test).asList()

给出:

['key', [['30'], ['40', '20', '10']]]

命名结果还可以让您按名称获取已解析的位:

result = lineExpr.parseString(test)
print result.keyword
print result.data

给出:

key
[[['30'], ['40', '20', '10']]]
于 2013-09-15T07:35:16.827 回答