我正在尝试解析一些维基百科文章的信息框,但似乎无法弄清楚。我已经为 Albert Einstein 下载了文件,我尝试解析 Infobox如下所示:我正在尝试将信息框中的每个项目放入结构或地图中:m["name"] = "Albert Einstein"m["image"] = "Einstein...."......m["death_date"] = "{{Death date and age|df=yes|1955|4|18|1879|3|14}}"......我什至无法隔离信息框。我得到:[[{{Infobox scientist | name = Albert Einstein | image = Einstein 1921 by F Schmutzer - restoration.jpg | caption = Albert Einstein in 1921 | birth_date = {{Birth date|df=yes|1879|3|14}}]]API 中的 Albert Einstein 条目可以在以下位置找到:https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=revisions&rvprop=content&format=json编辑:基于对这个问题的公认答案,我尝试了以下正则表达式:(?=\{Infobox)(\{([^{}]|(?1))*\})但得到:panic: regexp: Compile(`(?=\{Infobox)(\{([^{}]|(?1))*\})`): error parsing regexp: invalid or unsupported Perl syntax: `(?=`编辑 #2:如果有办法通过他们的 API 提取信息,那么我会接受....我一直在阅读文档但找不到它。
1 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
我做了一个可能对你有用的正则表达式:
^\s*\|\s*([^\s]+)\s*=\s*(\{\{Plainlist\|(?:\n\s*\*.*)*|.*)
解释
这部分:
^\s*\|\s*([^\s]+)\s*=\s*
匹配行的开头,例如:| <the_label> =
继续在同一行,这部分:
(\{\{Plainlist\|(?:\n\s*\*.*)*|.*)
将匹配列表:{{Plainlist| * [[Ernst G. Straus]] * [[Nathan Rosen]] * [[Leó Szilárd]]
(请注意,它可能会省略最后的}}
。哦,好吧。)
如果没有列表,则匹配到行尾。
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消