使用 pyparsing 和 nestedExpr 设置起点时遇到问题

Trouble with setting a start point with pyparsing and nestedExpr

抱歉这个新手问题,但这个问题一直让我抓狂,搜索了好几个小时都没有找到解决方案。

我有一个路由器配置输入文件,类似于:

groups {
...some nested info...
}
some text....
system {
...some nested info...
}
chassis {
...some nested info...
}

现在使用 pyparsing 和 nestedExpr,我可以解析第一部分 'groups' 并在列表中得到一组完美的列表,但我无法继续 'system' 或 'chassis'.

理想情况下,我想从 'chassis' 开始,只获取该部分的列表列表,仅此而已。

有没有办法让 pyparsing 和 nestedExpr 处理整个文件或从某个点开始?

我当前的代码非常简单,理想情况下我如何让它从 'chassis':

开始
from pyparsing import *    

with open('newfile.txt') as routerFile:
    test = routerFile.read()

    expr = Word(alphas) + nestedExpr('{','}')
    print expr.parseString(test)

好的,看来我搜索的还不够努力。

我相信这个 post 给了我答案 Parsing TCL lists in Python

当您只想解析较大文本的选定位时,您有几个选项。

一种是使用pyparsing的SkipTo class.

from pyparsing import Word, SkipTo

text = "AAA stuff I dont care about BBB more junk"

part1 = Word("A")
part2 = Word("B")
parser = part1 + SkipTo(part2) + part2

print(parser.parseString(text).asList())

打印

['AAA', 'stuff I dont care about ', 'BBB']

如果您真的不想要那些干预的东西,请使用SkipTo(part2).suppress()

另一种选择文本的方法是使用 scanString 或 searchString 而不是 parseString,如 中所述。