如果我有一些 xml 包含以下 mediawiki 标记之类的内容:
“ ...收集于 12 世纪,其中 [[亚历山大大帝]] 是英雄,他在其中的代表,有点像英国 [[亚瑟王|亚瑟]]”
什么是适当的论点,例如:
re.findall([[__?__]], article_entry)
我在转义双方括号并获得正确的文本链接时有点磕磕绊绊,例如:[[Alexander of Paris|poet named Alexander]]
这是一个例子
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']
正则表达式: \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/w/api.php?action=query&prop=链接&标题=Stack_Overflow_(网站)。
请注意,这两种方法都缺少嵌入在模板中的链接。