Python语法规则 - 用于解析变量的入站文本

2024-06-17 11:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

假设您的输入由许多示例模板组成,这些模板没有任何可见的分隔符,只有内联表达式。你知道吗

sample_tmp_1 = """
IKE peer REMOTE.END.RANDOM.IP., Index 1651435, 
Gateway Role: IKE-GATEWAY
REMOTE.END.RANDOM.IP.:500
"""

sample_tmp_2 = """
    IKE peer REMOTE.END.RANDOM.IP., 
    REMOTE.END.RANDOM.IP.:500Index 1651435, 
    Gateway Name: IKE-GATEWAY
"""

您需要基于一个内联表达式从几十个模板中解析某些信息。 我解决这个问题的一个方法是对变量进行迭代

for line in sample_tmp_1.split("\n"):
    if "Role:" in line:
       Role = do_X(line,'Role')
    if "IKE peer" in line:
       do_Y

and use regular expressions for 
for line in sample_tmp_2.split("\n"):
    if "Role:" in line:
       do_X
    if "IKE peer" in line:
       do_Y

def do_X: 
    return re.search(Parameter, Data)
def do_Y:
    pass

如果模板的数据结构可能与使用regex组时的数据结构不同,那么这些模板将非常具有包容性,因为我将在获取值位置方面发挥很大作用。你知道吗

 INBOUND = re.search(".*(show.*)",text)
    if INBOUND:
        key = INBOUND.group(1)

但是,我不能仅仅认为没有库(类似于Lex设置yacc解析器使用的语法规则)可以直接从基于Python表达式的模板解析数据。你知道吗

有图书馆协助这项工作吗?你知道吗

例如:

>>> from jinja2 import Template
>>> t = Template("Hello {{ something }}!")
>>> t.render(something="World")

能够搜索关键字

print(Do_X(t.render, Template))
"World"

谢谢你的帮助!你知道吗


Tags: sampleinip模板ifremote表达式line