R - 如何在正则表达式匹配中使用apply而不是for循环

时间:2014-05-26 15:27:32

标签: regex r for-loop apply

我有一个for循环,我在其中提取网址中的文件名,然后下载并保存文件:

for(url in filing.urls) {
    m = regexpr("\\d+-\\d+-\\d+\\.txt",url,perl=T)
    file.name = regmatches(url,m)
    download.file(url, destfile=paste("filings/",file.name, sep=""), method="curl")
}

我想知道是否可以使用apply在一行中构建所有file.names?它可能会使代码更具可读性。

2 个答案:

答案 0 :(得分:1)

如果filing.urls是向量:

,这应该有效
f <- function(url)
  regmatches(url, regexpr("\\d+-\\d+-\\d+\\.txt",url,perl=T))
file.names <- sapply(filin.urls, f)

答案 1 :(得分:1)

假设在第一个数字之前至少有一个字符,这似乎更简单:

lapply(filing.urls, function(url) 
           download.file(url, 
                destfile = sub("(.*\\D)\\d+-\\d+-\\d+\\.txt", "filings/", url),
                method = "curl"
           )
)