gpt4 book ai didi

python - 当 'text' 可能包含更多 {{ text }} block 时,如何用 re.sub() 替换表达式 {{ text }} ?

转载 作者:行者123 更新时间:2023-12-01 05:32:05 27 4
gpt4 key购买 nike

我正在尝试解析原始维基百科文章内容,例如the article on Sweden ,使用re.sub()。但是,我在尝试替换 {{some text}} block 时遇到了问题,因为它们可以包含更多的 {{some text}} block 。

以下是上述文章中的一个简短示例:

{{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}}

大括号内的大括号递归理论上可以任意嵌套到任意数量的级别。

如果我匹配 {{.+}} 的贪婪 block ,则从 {{Infoboxeo}} 的所有内容都会匹配,包括我不想匹配的文本。

如果我匹配{{.+}}的非贪婪 block ,则从{{Infoboxicon=no}}的部分已匹配,{{Link GA|eo}} 也是如此。但后来我留下了字符串 | common_name [...] 不想解析。

我还尝试了 \{\{.+(\{\{.+\}\})*.+\}\}\{\{[^\{]+(\{\{[^\{]+\}\})*[^\{]+\}\},希望仅匹配较大块内的子 block ,但没有效果。

我会列出我尝试过的所有内容,但老实说我记不起一半,而且我怀疑它会有多大用处。它总是会回到同样的问题:为了使双花括号 }} 匹配,需要事先出现相同数量的 {{

这是否可以使用正则表达式来解决,还是我需要其他解决方案?

最佳答案

您考虑过mwparserfromhell

import mwparserfromhell
s = """{{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}}"""
wikicode = mwparserfromhell.parse(s)
print wikicode.filter_templates()[0]

打印:

{{Infobox country
| conventional_long_name = Kingdom of Sweden
| native_name = {{native name|sv|Konungariket Sverige|icon=no}}
| common_name = Sweden
}}

关于python - 当 'text' 可能包含更多 {{ text }} block 时,如何用 re.sub() 替换表达式 {{ text }} ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19971991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com