我是python的新手,从来没有使用过正则表达式,我被要求在一个项目中使用它。 我的输入文件使用以下样式:
tag <itemname> {
<subitem>
<subitem> -> possible relationship
<~subitem> -> this is all irrelevant
<more subitems>
}
用不同的标签和不同长度的数据一遍又一遍地重复。 我需要将其转换为json,并且使用单元测试我已经知道了如何可靠地实现这一点,因为我有一个单元测试,但是我不知道如何可靠地解析一个文件,一次在一个“标记”上面有数千个结构。
基本上,我试图找出如何从文件中重复读取第一行(itemname)以及下面两个花括号之间的所有内容,并理想地将其变成可以使用的可迭代形式。 有谁能给我一些建议吗?
如果你有这样的字符串-
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)
现在您可以对每个标记运行自己的解析。