Pyparsing 包含一个与此非常相似的自适应表达式,称为 countedArray。countedArray(expr) 解析前导整数“n”,然后解析 expr 的“n”个实例,将整个数组作为单个列表返回。其工作方式是 countedArray 解析一个前导整数表达式,后跟一个未初始化的 Forward 表达式。前导整数表达式附加了一个解析操作,它将以下 Forward 分配给 'n'*expr。pyparsing 解析器然后继续,并解析以下 'n' expr's。所以它是一种自我修改的解析器。
要解析您的表达式,这看起来像:
integer = Word(nums).setParseAction(lambda t:int(t[0]))
following = Forward()
integer.addParseAction(lambda t: following << Word(printables+" ",exact=t[0]))
H_expr = integer + 'H' + following
print H_expr.parseString("22HThis is a test string.This is not in the string")
印刷:
[22, 'H', 'This is a test string.']
如果 Ply 有类似的东西,也许你可以使用这种技术。