给予
import pyparsing as pp
lines = '''\
(xcoord -23899.747)
(ycoord 14349.544)
(elev 23899)
(region "mountainous")
(rate multiple)'''
leftParen = pp.Literal('(')
rightParen = pp.Literal(')')
doublequote = pp.Literal('"')
v_string = pp.Word(pp.alphanums)
v_quoted_string = pp.Combine( doublequote + v_string + doublequote)
v_number = pp.Word(pp.nums+'.'+'-')
keyy = v_string
valu = v_string | v_quoted_string | v_number
item = pp.Group( pp.Literal('(').suppress() + keyy + valu + pp.Literal(')').suppress()
items = pp.ZeroOrMore( item)
dicct = pp.Dict( items)
pp.ParserElement.setDefaultWhitespaceChars('\r\n\t ')
print "item yields: " , item.parseString( lines).dump()
print "items yields: " , items.parseString( lines).dump()
print "dicct yields: ", dicct.parseString( lines).dump()
给予
item yields: [['xcoord', '-23899.747']]
[0]:['xcoord', '-23899.747']
items yields: [['xcoord', '-23899.747']]
[0]:['xcoord', '-23899.747']
dicct yields: [['xcoord', '-23899.747']]
[0]:['xcoord', '-23899.747']
嗯,我希望在DICT里能看到五个项目。我对Dict、ZeroOrMore和Group的使用似乎与网上的其他例子一致。似乎只有第一项匹配。我做错什么了?你知道吗
蒂亚
代码战士
这比你想象的要容易。(对我们中的一些人来说,这只需要几个星期的练习。)
v_number
表示数值,v_string
表示不带引号的字符串值非常简单。你知道吗Combine
与带引号的字符串一起使用,以便在解析的结果中包含引号。你知道吗Group
与key
和value
一起使用,以便在解析器的输出中对这些值进行配对。你知道吗ZeroOrMore
允许任意数量的键值对,包括零。你知道吗输出:
相关问题 更多 >
编程相关推荐