Python 2.7 python、pyparsing、stopOn和重复结构
是时候复习一下我的语法分析技能了 给定一个包含重复结构的文件Python 2.7 python、pyparsing、stopOn和重复结构,python-2.7,pyparsing,Python 2.7,Pyparsing,是时候复习一下我的语法分析技能了 给定一个包含重复结构的文件 space_missions Main Objects: /Projects/antares_III /Projects/apollo ground_missions Main Objects: /Projects/Barbarossa /Projects/Desert_Eagle 还有我的2.7脚本 def last_occurance_of( expr): return expr + ~pp.Followed
space_missions
Main Objects:
/Projects/antares_III
/Projects/apollo
ground_missions
Main Objects:
/Projects/Barbarossa
/Projects/Desert_Eagle
还有我的2.7脚本
def last_occurance_of( expr):
return expr + ~pp.FollowedBy( expr)
ppKeyName = pp.Word( pp.alphanums)
ppObjectLabel = pp.Literal("Main Objects") + pp.FollowedBy(':')
ppObjectRegex = pp.Regex(r'\/Projects\/\w+')
ppTag = pp.Group( ppKeyName.setResultName('keyy') + pp.Suppress( ppObjectLabel) + pp.ZeroOrMore( ppObjectRegex, stopOn=last_occurance_of( ppObjectRegex)).setResultName('objects') )
ppTags = pp.OneOrMore( ppTag)
with open( fn) as fp:
slurp = fp.read()
results = ppTags.parseString( slurp)
我想得到返回的结果
[['space_missions',['/Projects/antares_III','/Projects/apollo']
,['ground_missions',['/Projects/Barbarossa','/Projects/Desert_Eagle']]
那么我在这里错过了什么?我意识到我很幸运,因为组成列表的字符串都有相同的开头,这使得()的最后一次出现可以锁定,但是在更一般的情况下,如果字符串没有任何区别于标记字符串,我们该怎么办呢
仍在搜索Steve要在解析器中修复的三件事: