【发布时间】:2014-07-03 17:33:25
【问题描述】:
我发现了几个关于 pyparsing 的主题。他们在解析嵌套循环时处理几乎相同的问题,但即使这样,我也找不到解决我的错误的方法。
我有以下格式:
key value;
header_name "optional_metadata"
{
key value;
sub_header_name
{
key value;
};
};
key value;
- 键是字母
- 值可能是 Int、String 类型,带有字母数字 + "@._"
- 键/值可能在大括号之后
- key/value 可能在文件中的第一个大括号块之前
- 大括号之前或之后的键/值是可选的
- 标题可能有名称
- 右大括号后跟分号
我使用了以下解析器:
VALID_KEY_CHARACTERS = alphanums
VALID_VALUE_CHARACTERS = srange("[a-zA-Z0-9_\"\'\-\.@]")
lbr = Literal( '{' ).suppress()
rbr = Literal( '}' ).suppress() + Literal(";").suppress()
expr = Forward()
atom = Word(VALID_KEY_CHARACTERS) + Optional(Word(VALID_VALUE_CHARACTERS))
pair = atom | lbr + OneOrMore( expr ) + rbr
expr << Group( atom + pair )
当我使用它时,我只得到了“header_name”和“header_metadata”,我对其进行了修改,并且在大括号内只得到了键/值,python 异常被触发以显示解析错误(它需要'}'到达 sub_header_name 时。
谁能帮我理解为什么? 谢谢。
【问题讨论】:
标签: python nested-loops pyparsing braces