3

如果我有一些 xml 包含以下 mediawiki 标记之类的内容:

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

什么是适当的论点,例如:

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

我在转义双方括号并获得正确的文本链接时有点磕磕绊绊,例如:[[Alexander of Paris|poet named Alexander]]

4

4 回答 4

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']
于 2009-05-01T01:20:08.580 回答
1

正则表达式: \w+( \w+)+(?=]])

输入

[[巴黎的亚历山大|名叫亚历山大的诗人]]

输出

诗人亚历山大

输入

[[巴黎的亚历山大]]

输出

巴黎的亚历山大

于 2009-05-01T01:52:23.103 回答
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"]
于 2009-05-01T01:57:28.473 回答
1

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

请注意,这两种方法都缺少嵌入在模板中的链接。

于 2009-05-01T04:23:25.750 回答