r语言 - 提取特殊字符"/"之间的倒数第二个单词



我想提取'/'符号后的倒数第二个字符串。例如,

url<- c('https://example.com/names/ani/digitalcod-org','https://example.com/names/bmc/ambulancecod.org' )
df<- data.frame (url)

我想从两者之间的最后一个单词中提取第二个单词//,并想获得单词"ani"one_answers"bmc">

所以,我试过这个

library(stringr)
df$name<- word(df$url,-2)

我需要如下输出:

name 
ani
bmc 

您可以使用word,但需要指定分隔符

library(stringr)
word(url, -2, sep = '/')
#[1] "ani" "bmc"

试试这个:

as.data.frame(sapply(str_extract_all(df$url,"\w{2,}(?=\/)"),"["))[3,]
#   V1  V2
#3 ani bmc
as.data.frame(sapply(str_extract_all(df$url,"\w{2,}(?=\/)"),"["))[2:3,]
#   V1    V2
#2 names names
#3   ani   bmc

gsub与一起使用

.*?([^/]+)/[^/]+$


R:中

urls <- c('https://example.com/names/ani/digitalcod-org','https://example.com/names/bmc/ambulancecod.org' )
gsub(".*?([^/]+)/[^/]+$", "\1", urls)

这产生

[1] "ani" "bmc"

请参阅regex101.com上的演示。

以下是使用strsplit的解决方案

words <- strsplit(url, '/')
L <- lengths(words)
vapply(seq_along(words), function (k) words[[k]][L[k]-1], character(1))    
# [1] "ani" "bmc"

使用basename的非正则表达式方法

basename(mapply(sub, pattern = basename(url), replacement = "", x = url, fixed = TRUE))
#[1] "ani" "bmc"

basename(url)"删除最后一个路径分隔符(如果有)之前的所有路径"并返回

[1] "digitalcod-org"   "ambulancecod.org"

使用mapplyurl中的每个元素的该结果替换为"",并再次调用basename

最新更新