我发现了几个关于 pyparsing 的主题。他们在解析嵌套循环时处理几乎相同的问题,但即使这样,我也找不到解决我的错误的方法。
我有以下格式:
key value;
header_name "optional_metadata"
{
key value;
sub_header_name
{
key value;
};
};
key value;
- 键是字母
- 值可以是 Int、String 类型,带有 alphanum + "@._"
- 键/值可能在大括号块之后
- 键/值可能在第一个大括号块之前的文件中
- 大括号块之前或之后的键/值是可选的
- 标头可能有名称
- 右大括号后跟一个分号
我使用了以下解析器:
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异常被触发以显示一个解析错误(它在到达时需要'}'子标题名称。
任何人都可以帮助我理解为什么?谢谢你。