【发布时间】:2012-12-02 23:20:44
【问题描述】:
我想使用 Python 在特定字符串之后提取 MediaWiki 标记格式的内容。例如,2012 U.S. presidential election article 包含名为“nominee1”和“nominee2”的字段。玩具示例:
In [1]: markup = get_wikipedia_markup('United States presidential election, 2012')
In [2]: markup
Out[2]:
u"{{
| nominee1 = '''[[Barack Obama]]'''\n
| party1 = Democratic Party (United States)\n
| home_state1 = [[Illinois]]\n
| running_mate1 = '''[[Joe Biden]]'''\n
| nominee2 = [[Mitt Romney]]\n
| party2 = Republican Party (United States)\n
| home_state2 = [[Massachusetts]]\n
| running_mate2 = [[Paul Ryan]]\n
}}"
以上面的选举文章为例,我想提取紧跟“nomineeN”字段但在调用下一个字段之前存在的信息(由点“|”划分)。因此,给定上面的例子,理想情况下,我想提取“Barack Obama”和“Mitt Romney”——或者至少是它们嵌入的语法('''[[Barack Obama]]''' and [ [米特·罗姆尼]])。其他正则表达式有extracted links from the wikimarkup,但我(失败的)尝试使用positive lookbehind assertion 有点类似:
nominees = re.findall(r'(?<=\|nominee\d\=)\S+',markup)
我的想法是,它应该找到像 "|nominee1=" 和 "|nominee2=" 这样的字符串,在 "|"、"nominee"、"=" 之间可能有一些空格,然后返回它后面的内容,比如 "Barack Obama ”和“米特·罗姆尼”。
【问题讨论】:
-
顺便说一句,现在你应该使用维基数据,它会给你已经很好地解析和结构化的维基百科数据。 wikidata.org/wiki/Wikidata:Data_access
标签: python regex python-2.7 mediawiki wikipedia