提问者:小点点

在python中使用正则表达式解析重复输入


我是python的新手,从来没有使用过正则表达式,我被要求在一个项目中使用它。 我的输入文件使用以下样式:

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant 
    <more subitems> 
} 

用不同的标签和不同长度的数据一遍又一遍地重复。 我需要将其转换为json,并且使用单元测试我已经知道了如何可靠地实现这一点,因为我有一个单元测试,但是我不知道如何可靠地解析一个文件,一次在一个“标记”上面有数千个结构。

基本上,我试图找出如何从文件中重复读取第一行(itemname)以及下面两个花括号之间的所有内容,并理想地将其变成可以使用的可迭代形式。 有谁能给我一些建议吗?


共1个答案

匿名用户

如果你有这样的字符串-

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant 
    <more subitems> 
} 

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant
    <more subitems>
    <more subitems>
}

(可能还有更多的标签)

您只需要每个标记的列表。

您可以使用-(tag.+{\n(?:.+\n)*?})

查看这里的演示

你的代码看起来像-

s = """tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant 
    <more subitems> 
} 

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant
    <more subitems>
    <more subitems>
}
"""

tags = re.findall(r'(tag .+ {\n(?:.+\n)*?})', s)

# Just to test out the tags
for tag in tags:
    print(tag)

现在您可以对每个标记运行自己的解析。