转储文本中的示例是 -
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
答案 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)