用于查找MediaWiki标记链接内容的Python正则表达式
题
如果我有一些xml包含以下mediawiki标记:
" ...收集于12世纪,其中[[亚历山大大帝]]是 英雄,他代表的, 有点像英国[[国王 亚瑟|亚瑟]] QUOT;
什么是适当的论据,如:
re.findall([[__?__]],article_entry)
我有点躲过双方括号,并获得文本的正确链接,如: [[巴黎亚历山大|诗人亚历山大]]
解决方案
这是一个例子
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']
其他提示
RegExp: \ w +(\ w +)+(?=]])
<强>输入强>
[[巴黎亚历山大|诗人亚历山大]]
<强>输出强>
诗人亚历山大
<强>输入强>
[[巴黎亚历山大]]
<强>输出强>
巴黎亚历山大
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"]
如果您尝试从页面获取所有链接,当然,如果可能的话,使用MediaWiki API要容易得多,例如: http://en.wikipedia.org/瓦特/ api.php动作=查询&安培;丙=链接和安培;标题= Stack_Overflow_(网站)
请注意,这两种方法都会错过模板中嵌入的链接。
不隶属于 StackOverflow