gpt4 book ai didi

python - 从 wiki 模板标记中提取字段的正则表达式

转载 作者:行者123 更新时间:2023-11-28 22:00:59 26 4
gpt4 key购买 nike

我想使用 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”字段之后但在调用下一个字段之前存在的信息(由 pip“|”分隔)。因此,根据上面的示例,我希望提取“Barack Obama”和“Mitt Romney”——或者至少提取它们所嵌入的语法('''[[Barack Obama]]''' 和 [ [米特罗姆尼]])。其他正则表达式有 extracted links from the wikimarkup ,但我(失败)尝试使用 positive lookbehind assertion有点像:

nominees = re.findall(r'(?<=\|nominee\d\=)\S+',markup)

我的想法是,它应该找到像“|nominee1=”和“|nominee2=”这样的字符串,在“|”、“nominee”、“=”之间可能有一些空格,然后返回它后面的内容,比如“Barack Obama” ”和“米特·罗姆尼”。

最佳答案

使用mwparserfromhell !它压缩了您的代码,并且更安心地捕获结果。对于此示例的用法:

import mwparserfromhell as mw
text = get_wikipedia_markup('United States presidential election, 2012')
code = mw.parse(text)
templates = code.filter_templates()
for template in templates:
if template.name == 'Infobox election':
nominee1 = template.get('nominee1').value
nominee2 = template.get('nominee2').value
print nominee1
print nominee2

捕获结果非常简单。

关于python - 从 wiki 模板标记中提取字段的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887458/

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