我正在尝试解析原始维基百科文章内容,例如瑞典的文章,使用re.sub()
. 但是,我在尝试替换 的块时遇到了问题{{some text}}
,因为它们可以包含更多的{{some text}}
.
这是上述文章的一个简短示例:
{{Infobox country
| conventional_long_name = Kingdom of Sweden
| native_name = {{native name|sv|Konungariket Sverige|icon=no}}
| common_name = Sweden
}}
Some text I do not want parsed.
{{Link GA|eo}}
花括号递归中的花括号理论上可以任意嵌套到任意数量的级别。
如果我匹配 的贪心块{{.+}}
,则从{{Infobox
to匹配所有内容eo}}
,包括我不想匹配的文本。
如果我匹配 的不贪婪块{{.+}}
,则从{{Infobox
to的部分icon=no}}
匹配,原样{{Link GA|eo}}
。但后来我留下了字符串| common_name [...] not want parsed.
我还尝试了 and 的变体,\{\{.+(\{\{.+\}\})*.+\}\}
希望\{\{[^\{]+(\{\{[^\{]+\}\})*[^\{]+\}\}
只匹配较大块中的子块,但无济于事。
我会列出我尝试过的所有内容,但老实说,我不记得一半了,我怀疑它无论如何都会有多大用处。它总是回到同样的问题:为了匹配双花括号}}
,需要{{
事先有相同的出现次数。
这甚至可以使用正则表达式解决,还是我需要其他解决方案?