使用 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)
我已经使用了非贪婪限定符 ?
。为什么它仍然在寻找最长的模式而不在第二个停止 ,
。
问题是 .+
吞掉了第一个逗号,你应该把它改成 .+?
,或者更好的是 [^,]+
我正在使用 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)
我已经使用了非贪婪限定符 ?
。为什么它仍然在寻找最长的模式而不在第二个停止 ,
。
问题是 .+
吞掉了第一个逗号,你应该把它改成 .+?
,或者更好的是 [^,]+