用于查找MediaWiki标记链接内容的Python正则表达式

时间:2009-05-01 01:11:52

标签: python regex mediawiki

如果我有一些xml包含以下mediawiki标记:

  

“...收集于12世纪,其中[[亚历山大大帝]]是   英雄,他代表的,   有点像英国[[国王   亚瑟|亚瑟]]“

什么是适当的论据,如:

re.findall([[__?__]], article_entry)

我在转义双方括号时遇到了一些绊脚石,并获得了正确的文字链接:[[Alexander of Paris|poet named Alexander]]

4 个答案:

答案 0 :(得分:5)

这是一个例子

import re

pattern = re.compile(r"\[\[([\w \|]+)\]\]")
text = "blah blah [[Alexander of Paris|poet named Alexander]] bldfkas"
results = pattern.findall(text)

output = []
for link in results:
    output.append(link.split("|")[0])

# outputs ['Alexander of Paris']

版本2,将更多内容放入正则表达式中,但结果会更改输出:

import re

pattern = re.compile(r"\[\[([\w ]+)(\|[\w ]+)?\]\]")
text = "[[a|b]] fdkjf [[c|d]] fjdsj [[efg]]"
results = pattern.findall(text)

# outputs [('a', '|b'), ('c', '|d'), ('efg', '')]

print [link[0] for link in results]

# outputs ['a', 'c', 'efg']

版本3,如果您只想要没有标题的链接。

pattern = re.compile(r"\[\[([\w ]+)(?:\|[\w ]+)?\]\]")
text = "[[a|b]] fdkjf [[c|d]] fjdsj [[efg]]"
results = pattern.findall(text)

# outputs ['a', 'c', 'efg']

答案 1 :(得分:1)

RegExp: \ w +(\ w +)+(?=]])

<强>输入

[[巴黎亚历山大|诗人亚历山大]]

<强>输出

诗人亚历山大

<强>输入

[[巴黎亚历山大]]

<强>输出

巴黎亚历山大

答案 2 :(得分:1)

import re
pattern = re.compile(r"\[\[([\w ]+)(?:\||\]\])")
text = "of which [[Alexander the Great]] was somewhat like [[King Arthur|Arthur]]"
results = pattern.findall(text)
print results

会给出输出

["Alexander the Great", "King Arthur"]

答案 3 :(得分:1)

如果您尝试从页面获取所有链接,当然,如果可能的话,使用MediaWiki API要容易得多,例如: http://en.wikipedia.org/w/api.php?action=query&prop=links&titles=Stack_Overflow_(website)

请注意,这两种方法都会错过模板中嵌入的链接。