Python正则表达式搜索匹配第一个实例

23

我想要使用正则表达式找到第一个匹配两个方括号的实例。目前,我正在做:

regex = re.compile("(?<=(\[\[)).*(?=\]\])")
r = regex.search(line)

以下适用于像这样的行:

[[string]] 

返回 string

但是当我尝试将它放在另一行时:

[[string]] ([[string2]], [[string3]])
结果是
string]] ([[string2]], [[string3

我错过了什么?

1个回答

51
Python中的*, +, ?{n,m}量词默认都是贪婪的

使用上述量词进行匹配时,默认会尽可能多地匹配。在您的情况下,这意味着匹配第一个括号和最后一个括号。在Python中,您可以通过在量词后面加上?来使任何量词变为非贪婪(或“懒惰”)。在您的情况下,这将转换为正则表达式中间部分的.*?


14
细微的指正:正则表达式 本质上并非贪婪或非贪婪的。Python 的 re 包提供了一个贪婪、递归回溯实现的正则表达式。(虽然答案正确,加一分) - SingleNegationElimination

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接