python嵌套结构_python-使用pyparsing解析嵌套结构

一些常规的pyparsing技巧:

Or(expr,empty)最好写成Optional(expr).另外,您的Or表达式试图使用类Empty创建一个Or,您可能打算为第二个参数编写Empty()或empty.

expr.setResultsName(“ name”)现在可以写成expr(“ name”)

如果要对结果应用结构,请使用“组”.

使用dump()而不是asDict()可以更好地查看解析结果的结构.

这是我如何建立您的表达方式:

from pyparsing import Word, nums, oneOf, Combine, Group, Optional

integer = Word(nums)

sign = oneOf("+ -")

signedInteger = Combine(sign + integer)

integerExpr = Group(integer("base") + Optional(signedInteger, default="0")("offset"))

integerRange = integerExpr("start") + Optional('_' + integerExpr("end"))

tests = """\n12

12+34

12_56

12+34_56-78""".splitlines()

for t in tests:

result = integerRange.parseString(t)

print t

print result.dump()

print result.asDict()

print result.start.base, result.start.offset

if result.end:

print result.end.base, result.end.offset

print

印刷品:

12

[['12', '0']]

- start: ['12', '0']

- base: 12

- offset: 0

{'start': (['12', '0'], {'base': [('12', 0)], 'offset': [('0', 1)]})}

12 0

12+34

[['12', '+34']]

- start: ['12', '+34']

- base: 12

- offset: +34

{'start': (['12', '+34'], {'base': [('12', 0)], 'offset': [('+34', 1)]})}

12 +34

12_56

[['12', '0'], '_', ['56', '0']]

- end: ['56', '0']

- base: 56

- offset: 0

- start: ['12', '0']

- base: 12

- offset: 0

{'start': (['12', '0'], {'base': [('12', 0)], 'offset': [('0', 1)]}), 'end': (['56', '0'], {'base': [('56', 0)], 'offset': [('0', 1)]})}

12 0

56 0

12+34_56-78

[['12', '+34'], '_', ['56', '-78']]

- end: ['56', '-78']

- base: 56

- offset: -78

- start: ['12', '+34']

- base: 12

- offset: +34

{'start': (['12', '+34'], {'base': [('12', 0)], 'offset': [('+34', 1)]}), 'end': (['56', '-78'], {'base': [('56', 0)], 'offset': [('-78', 1)]})}

12 +34

56 -78

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值