在python中使用re查找维基百科转储中的内部链接

时间:2013-01-17 09:46:11

标签: python regex wikipedia

转储文本中的示例是 -

s='[[Pierre-Joseph Proudhon|Proudhon]], [[Peter Kropotkin|Kropotkin]], [[Mikhail Bakunin|Bakunin]]'

当我运行regexp时给出 -

match_internal=re.findall('\[\[(.+)\]\]',s)
for i in match_internal:
    print i
>>Pierre-Joseph Proudhon|Proudhon]], [[Peter Kropotkin|Kropotkin]], [[Mikhail Bakunin|Bakunin

而不是打印

Pierre-Joseph Proudhon|Proudhon
Peter Kropotkin|Kropotkin
Mikhail Bakunin|Bakunin

2 个答案:

答案 0 :(得分:4)

您需要使用不情愿的量词而不是贪婪的: -

re.findall('\[\[(.+?)\]\]',s)  // Replaced `.+` with `.+?`

使用贪婪量词 - 您的模式 - (.+)将匹配所有字符串,直到最后]],并且不情愿的量词 - 模式 - (.+?)将停在第一个]]

>>> match_internal=re.findall('\[\[(.+?)\]\]',s)
>>> for i in match_internal:
        print i

Pierre-Joseph Proudhon|Proudhon
Peter Kropotkin|Kropotkin
Mikhail Bakunin|Bakunin

答案 1 :(得分:1)

+量词默认情况下尽可能匹配。由于.匹配字符串中的所有字符,因此只有一个匹配项,仅排除最外面的括号。

您应该在括号内搜索“非括号”字符,如下所示:

re.findall('\[\[([^\]]+)\]\]', s)