You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何解析infobox格式复杂字符串并提取数据为字典

你遇到的是维基类站点常用的MediaWiki Infobox模板语法,完全不用硬切字符串处理,有更简洁的方案,也可以实现类似JSON解析的结构化建模处理,以下是两种常用方案:

方案1:轻量正则匹配(适合规则固定的简单Infobox)

针对你给出的这种每行都是|键 = 值格式的Infobox,用正则提取键值对就足够高效,下面是Python的示例代码:

import re
from html import unescape

infobox_str = """{infobox Country
|country = France
|map = <map lat='47' lng='1.5' zoom='5' view='0' height='320' country='France'/>
|language = French (regional languages: Alsatian, Occitan, Breton, Corsican, Basque, Catalan, ...)
|capital = [[Paris]]
|pop = 65,8 million
|currency = Euro (€)
|hitch = <rating country='fr' />
|BW = FR
}"""

# 匹配所有 |键 = 值 的行,支持值内换行的场景
pattern = re.compile(r'\|\s*(\w+)\s*=\s*(.*?)\s*(?=\n\||\n})', re.DOTALL)
result = {}
for match in pattern.finditer(infobox_str):
    key = match.group(1)
    # 解码HTML转义字符,比如把&lt;转回<
    value = unescape(match.group(2))
    result[key] = value

print(result)

运行后就能直接输出你需要的字典结构,如果你不需要保留[[Paris]]这类wikitext标记,额外加一步字符串替换即可。

方案2:通用Wikitext解析(适合复杂场景)

如果后续需要处理嵌套模板、字段值多行换行等复杂的Wikitext内容,可以直接用专门的Wikitext解析库,和解析JSON的逻辑几乎一致:先把整段文本解析成语法树结构,再直接提取对应字段即可,不需要自己写匹配规则。
以Python的mwparserfromhell库为例,代码更简洁:

import mwparserfromhell
from html import unescape

wikicode = mwparserfromhell.parse(unescape(infobox_str))
# 提取文本中的第一个Infobox模板
infobox = wikicode.filter_templates()[0]
result = {param.name.strip(): str(param.value).strip() for param in infobox.params}
print(result)

这种方案扩展性更强,哪怕后续Infobox格式发生变化,也不需要大量修改代码逻辑。

内容的提问来源于stack exchange,提问作者Kacper Cichosz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:45:06