如果在以下代码中找不到匹配项(无VTP域或无VTP模式),如何返回特定语句(例如-域:[DISABLED]):
testData = """
vtp domain XXxxXX
vtp mode transparent
udld enable
snmp-server enable traps vtp
"""
print("----------------------")
# simple grammar to match #vtp
ident = Word(alphas, alphanums+"_")
macroDef = Literal("vtp") + ident.setResultsName("name") + restOfLine.setResultsName("value")
for lit,ResN,RoLResN in macroDef.scanString( testData ):
print('{0:5}{1:7}{2:1}{3:15}{4:}'.format("-",lit.name,":", lit.value,"[ENABLED]"))
print("******************************************************************************")
答案 0 :(得分:0)
由于您使用的是scanString
,因此与控制有关检测到哪些值丢失的分析相比,您更有控制权。由于您的pyparsing表达式一次只查找一个设置,因此它实际上只知道正在解析的当前行。要使用此方法检测缺失值,您需要保留自己已找到元素的列表,然后最后对预期但未找到的元素执行操作(填写默认值,或提示用户取值,或引发异常,或...)。
要进行pyparsing检测参数的存在或不存在,您需要定义一个解析器,该解析器可一次读取所有参数,然后添加解析动作以进行验证。然后,您可能会使用parseString
而不是scanString
。