用 Go 解析维基百科信息框?

我正在尝试解析一些维基百科文章的信息框,但似乎无法弄清楚。我已经为 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 提取信息,那么我会接受....我一直在阅读文档但找不到它。


偶然的你
浏览 123回答 1
1回答

江户川乱折腾

我做了一个可能对你有用的正则表达式:^\s*\|\s*([^\s]+)\s*=\s*(\{\{Plainlist\|(?:\n\s*\*.*)*|.*)解释这部分:^\s*\|\s*([^\s]+)\s*=\s*匹配行的开头,例如:&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<the_label>&nbsp;=继续在同一行,这部分:(\{\{Plainlist\|(?:\n\s*\*.*)*|.*)将匹配列表:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{Plainlist| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;[[Ernst&nbsp;G.&nbsp;Straus]] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;[[Nathan&nbsp;Rosen]] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;[[Leó&nbsp;Szilárd]](请注意,它可能会省略最后的}}。哦,好吧。)如果没有列表,则匹配到行尾。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go