PyParse-如果没有匹配,则返回特定语句

时间:2020-06-27 17:20:55

标签: python pyparsing

如果在以下代码中找不到匹配项(无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("******************************************************************************")

1 个答案:

答案 0 :(得分:0)

由于您使用的是scanString,因此与控制有关检测到哪些值丢失的分析相比,您更有控制权。由于您的pyparsing表达式一次只查找一个设置,因此它实际上只知道正在解析的当前行。要使用此方法检测缺失值,您需要保留自己已找到元素的列表,然后最后对预期但未找到的元素执行操作(填写默认值,或提示用户取值,或引发异常,或...)。

要进行pyparsing检测参数的存在或不存在,您需要定义一个解析器,该解析器可一次读取所有参数,然后添加解析动作以进行验证。然后,您可能会使用parseString而不是scanString

相关问题