在 python 中使用 ttp 模块忽略数据

ignoring data using ttp module in python

我将通过以下示例解释我遇到的问题。我能够使用以下配置解析以下数据。当我使用 {{ignore}} 命令时,它帮助我获取该行,因为该行与正确的模板匹配,并忽略我不想拥有的数据。

from ttp import ttp
import json

data_to_parse = """
1.peace in the world
2.peace in the world world 
3.peace in the world world world 
"""

要解析此数据,我可以使用以下模板。

ttp_template = """
<group name="Quote">
{{peace}} in the {{world}}
</group>
<group name="Quote">
{{peace}} in the {{world}} {{ignore}}
</group>
<group name="Quote">
{{peace}} in the {{world}} {{ignore}} {{ignore}}
</group>
"""

通过以下配置,我可以得到我想要的解析数据:

def parser(data_to_parse):

    parser = ttp(data=data_to_parse, template=ttp_template)
    parser.parse()

    # print result in JSON format
    results = parser.result(format='json')[0]
    #print(results)

    #converting str to json. 
    result = json.loads(results)

    print(result)

parser(data_to_parse)

查看我的输出:

问题是我猜不出每一行有多少个“世界”,我不想继续写{{ignore}}命令获得所需的行并避免我不想拥有的词。例如,如果我在我的数据中添加以下行,它不会被我上面共享的模板捕获,我需要再添加一个 {{ignore}} 来捕获以下数据。

4.peace in the world world world world

我的理解是 ttp 将单词与每个 space 分开的原因。例如,如果我有 _ 而不是 'space' 如下 3.peace in the world_world_world 我可以在我的模板中使用简单的一行来获取数据。但是,在我的数据中,我需要注意并捕获带有 space 的行。

所以问题是有什么方法可以促进这个过程吗?如您所见,我有一个解决方法,但是我需要找出一种简单的方法来解决该问题。非常感谢任何建议。

我找到了解决这个问题的方法。 {{ name | PHRASE }}{{ name | ORPHRASE }} 可用于此目的。

{{ name | PHRASE }}

此模式匹配任何短语 - 由单个 space 字符分隔的单词集合,例如“word1 word2 word3”。

{{ name | ORPHRASE }}

在许多情况下,需要提取的数据可以是单个单词或短语,最突出的例子是各种描述,例如接口描述、BGP 对等点描述等。ORPHRASE 允许匹配和提取这样的数据数据。