使用 re.findall() 和 python 无法提取正确的内容

Failure to extract correct contents using re.findall() with python

我正在使用 Python 2 并且我有一个字符串

c = """
if ( is.data.frame(by) && ncol(by)>1 ) { by_by = sapply( by, paste.me, collapse, split) }
  ldat = sapply(xdat, by_by )
  out = data.table::rbindlist( lapply(ldat, FUN, ...) )
  return(out)
"""

我想在 sapply() 或 lapply() 中提取第二个参数,因此希望得到 ['paste.me','by_by','FUN']。不幸的是,我使用以下代码得到 ['split', 'by_by', '...']

re.findall(r"\b[sl]apply\(.+,\s*([\w._]+?)[,\s)]", c)

我已经使用了非贪婪限定符 ?。为什么它仍然在寻找最长的模式而不在第二个停止 ,

问题是 .+ 吞掉了第一个逗号,你应该把它改成 .+?,或者更好的是 [^,]+