小编XYZ*_*XYZ的帖子

以任意顺序和数量处理一系列 pyparsing 表达式

使用 pyparsing,我需要指定两个表达式可以以任何顺序出现,并且可以在两个大括号之间以任意数量出现。下面是我的代码。

import pyparsing as pp

def updateList(someList):
    def parseAction(str, loc, tokens):
        someList.append(tokens[0])
    return parseAction

msgNameList = []
ident = pp.Word(pp.alphanums + "_" + ".")
openBrace = pp.Suppress(pp.Literal("{"))
closeBrace = pp.Suppress(pp.Literal("}"))
fieldKw = pp.Keyword("field")
fieldExpr = fieldKw + ident + ident
msgKw = pp.Suppress(pp.Keyword("msg"))
msgName = ident.setParseAction(updateList(msgNameList))
msgExpr = pp.Forward()
msgBody = (openBrace + (pp.ZeroOrMore(fieldExpr) & pp.ZeroOrMore(msgExpr)) + closeBrace)
msgExpr << msgKw + msgName + pp.Optional(msgBody)

testStr1 = "msg msgNameA {msg msgNameAB {field type2 field2} field type1 field1}"
msgExpr.parseString(testStr1)
print …
Run Code Online (Sandbox Code Playgroud)

python parsing pyparsing python-2.7

3
推荐指数
1
解决办法
619
查看次数

标签 统计

parsing ×1

pyparsing ×1

python ×1

python-2.7 ×1