从 R 中的 JPG URL 链接中提取 JPG 名称



快速问题。我在数据集中有网址,例如

URL
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /10045.JPG
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /12325.PNG

我希望输出是这样的。

URL                                                                        ID
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /10045.JPG  10045
https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /12325.PNG  12325

请注意,我正在获取图片名称,在我的案例 ID 中,在 jpg 或 PNG 之前。

谢谢。

一个潜在的baseR解决方案:根据斜杠字符/将每个字符串split()到一个列表中,然后检索最后一个块并将其存储为ID- 然后,再次重复这个想法,但这次根据句点拆分并保留第一个块。

test <- data.frame(
url = c("https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /10045.JPG",
"https://xyz.sharepoint.com/personal/abc/Documents/xsdsd asdas /12325.PNG"),
stringsAsFactors = FALSE
)
test$ID <- sapply(strsplit(test$url, split = "/", FIXED = TRUE), tail, n = 1)
test$ID <- sapply(strsplit(test$ID, split = ".", FIXED = TRUE), head, n = 1)

编辑:通过将FIXED = TRUE添加到strsplit()中删除了正则表达式(因为它们并未真正用于此方法(,这似乎更快:

library(microbenchmark)
microbenchmark(
strsplit(test$url, split = "/"),
strsplit(test$url, split = "/", fixed = TRUE)
)
## Unit: microseconds
##                                           expr  min    lq   mean median    uq   max neval
##                strsplit(test$url, split = "/") 22.2 23.30 32.775  24.20 39.75 172.5   100
##  strsplit(test$url, split = "/", fixed = TRUE) 11.4 11.95 16.975  13.05 20.90  74.8   100

对于 Python 风格的正则表达式,这应该可以

r"(.+)/([0-9]+).(PNG|JPG)"

名称在第二个匹配组中

使用PCRE:

".+([[:digit:]]+).(JPG|PNG)"

最新更新