【发布时间】:2015-06-13 21:25:13
【问题描述】:
相关:Python parsing bracketed blocks
我有一个格式如下的文件:
#
here
are
some
strings
#
and
some
others
#
with
different
levels
#
of
#
indentation
#
#
#
因此,一个块由一个起始 # 和一个尾随 # 定义。但是,第 n-1 个区块的尾随 # 也是第 n 个区块的起始 #。
我正在尝试编写一个函数,给定这种格式,它将检索每个块的内容,并且也可以是递归的。
首先,我从正则表达式开始,但我很快就放弃了(我想你猜到了原因),所以我尝试使用pyparsing,但我不能简单地写
print(nestedExpr('#','#').parseString(my_string).asList())
因为它引发了 ValueError 异常 (ValueError: opening and closing strings cannot be the same)。
知道我无法更改输入格式,我还有比pyparsing 更好的选择吗?
我也尝试使用这个答案:https://stackoverflow.com/a/1652856/740316,并将{/} 替换为#/#,但它无法解析字符串。
【问题讨论】:
-
也许只是在第 n 个
#上替换为#-#之类的东西,然后通过-拆分或解析它。 -
我没办法改变输入格式,可惜...
-
您是想将所有级别分隔为字符串还是只是外部级别(例如,字符串的所有子级别都将作为该字符串包含在内)。那么删除字符串中的空格、制表符呢?
-
好吧,起初我想到了你的后一个命题,然后我会递归地在输出字符串上重复该方法,所以第一步只会给我外部级别,其他嵌套块作为原始字符串,然后迭代这些会给我这些嵌套块的内容等。所以基本上,你的问题的答案是你的第一个命题,但我想保留块级别的痕迹。如果您明白我的意思,我不希望所有块都在一维列表中“展平”。