regex - 自定义获取URL目录函数

标签 regex r strsplit

看起来很简单,

考虑以下 URL,

[1] "scripts.iucr.org/cgi-bin/paper?S1600536812045886"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
[2] "cpa-seoadvisors.com/cvv/auth/auth/view/pdf/index.html/"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
[3] "www.scirp.org/journal/PaperDownload.aspx?DOI=10.4236/csta.2012.13014"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[4] "www.google.com.cy/search?q=DNS+traffic&es_..."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
[5] "seesaa.net/pede/lobortis/ligula/sit/amet.png?semper=vitae&est=..."

我想获取第一个 '/' 和用 ? 分隔 token 的部分之间的部分。 我写了以下函数

get_directory <- function(x){
  dir <- sapply(strsplit(x, '/'), function(i)sum(grepl('\\?', i)))
  ifelse(dir > 0, sapply(strsplit(x, '/'), function(i) paste(i[-c(1, length(i))], collapse = '/')), 0)
}

但是在 [3] 和 [4] URL 处失败。

预期输出应该是

"cgi-bin"
"0"
"journal"
"0"
"pede/lobortis/liguls/sit"

数据

dput(df)
structure(list(V1 = c("scripts.iucr.org/cgi-bin/paper?S1600536812045886", 
"cpa-seoadvisors.com/cvv/auth/auth/view/pdf/index.html/", "www.scirp.org/journal/PaperDownload.aspx?DOI=10.4236/csta.2012.13014", 
"www.google.com.cy/search?q=DNS+traffic&es_...", "seesaa.net/pede/lobortis/ligula/sit/amet.png?semper=vitae&est=..."
)), .Names = "V1", row.names = c(NA, -5L), class = "data.frame")

最佳答案

我们可以使用str_extract。使用正则表达式环视,我们匹配一个或多个在 / 之后的字符 (.*),后跟 / 以及一个或多个不是 ? ([^?]+) 后跟 ?

library(stringr)
res <- str_extract(df$V1, "(?<=\\/).*(?=\\/[^?]+[?])")
res[is.na(res)] <- 0
res
#[1] "cgi-bin"                  "0"                        "journal"                 
#[4] "0"                        "pede/lobortis/ligula/sit"

关于regex - 自定义获取URL目录函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38204829/

相关文章:

ruby - 在每个大写字母的单词前放置一个逗号和一个空格

ruby - 在 Ruby 中使用正则表达式提取两个标签之间的文本

r - 在Linux上安装nloptr- fatal error : nlopt. h:无此类文件或目录

regex - 在 R 中计算 strsplit 的输出

python - 在没有循环的情况下解析模式之前的所有子字符串?

java - 如何将格式如 "java method signature"的字符串分成几部分?

r - 如何在R中对组内的列进行排序?

r - 寻找 `linearKEuclid`的使用方法以及 `spatstat`的对应函数

从字符串中删除特定模式

r - 列中唯一单词总数 - R