gpt4 book ai didi

python - 如何使用pyparsing解析F5 bigip.conf

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:22 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用这个漂亮的库来解析 BigIP 配置文件...语法应该是这样的:

stanza :: name { content }
name :: several words, might contain alphas nums dot dash underscore or slash
content:: stanza OR ZeroOrMore(printable characters)

为了让事情稍微复杂一点,有一个异常(exception):

如果名称以“rule”开头,则内容不能是“stanza”

我从这个开始:

from pyparsing import *
def parse(config):
def BNF():
"""
Example:
...
ltm virtual /Common/vdi.uis.test.com_80_vs {
destination /Common/1.2.3.4:80
http-class {
/Common/http2https
}
ip-protocol tcp
mask 255.255.255.255
profiles {
/Common/http { }
/Common/tcp { }
}
vlans-disabled
}
...
"""
lcb, rcb, slash, dot, underscore, dash = [c for c in '{}/._-']
name_word = Word(alphas + nums + dot + underscore + slash + dash)
name = OneOrMore(name_word).setResultsName("name")
stanza = Forward()
content = OneOrMore(stanza | ZeroOrMore(OneOrMore(Word(printables)))).setResultsName("content")
stanza << Group(name + lcb + content + rcb).setResultsName("stanza")
return stanza


return [x for x in BNF().scanString(config)]

上面的代码似乎陷入了某种无限循环。如果“名称”以“规则”开头,它也缺少我排除寻找“节”的要求。

最佳答案

OneOrMore(ZeroOrMore(OneOrMore(Word(printables))) 将始终匹配,从而导致无限循环。

此外,可打印内容包括一个右大括号,它被内容术语占用,并且不再可用于该节。 (如果您的内容可以包含一个右括号,您需要定义一些东西来转义它,以区分内容括号和节括号。)

要解决名称规则,您需要另一个内容定义,一个不包含节的内容定义和一个“规则规则”。

def parse(config):
def BNF():
lcb, rcb, slash, dot, underscore, dash = [c for c in '{}/._-']
printables_no_rcb = Word(printables, excludeChars=rcb)
name_word = Word(alphas + nums + dot + underscore + slash + dash)
name = OneOrMore(name_word).setResultsName("name")
rule = Group(Literal('rule') + name).setResultsName("name")
rule_content = OneOrMore(printables_no_rcb).setResultsName("content")
stanza = Forward()
content = OneOrMore(stanza | OneOrMore(printables_no_rcb)).setResultsName("content")
stanza << Group(rule + lcb + rule_content + rcb | name + lcb + content + rcb).setResultsName("stanza")
return stanza
return [x for x in BNF().scanString(config)]

关于python - 如何使用pyparsing解析F5 bigip.conf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15889170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com