извлечение второго последнего слова между специальными символами "/" - PullRequest
0 голосов
/ 31 января 2019

Я хотел бы извлечь вторую последнюю строку после символа '/'.Например,

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

Я хочу извлечь второе слово из последнего между двумя // и хотел бы получить слова 'ani' и 'bmc'

, поэтому япопробовал это

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

Мне нужен вывод, который выглядит следующим образом:

name 
ani
bmc 

Ответы [ 5 ]

0 голосов
/ 31 января 2019

Вот решение с использованием strsplit

words <- strsplit(url, '/')
L <- lengths(words)
vapply(seq_along(words), function (k) words[[k]][L[k]-1], character(1))    
# [1] "ani" "bmc"
0 голосов
/ 31 января 2019

Использование 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 .

0 голосов
/ 31 января 2019

Подход без регулярных выражений с использованием basename

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

basename(url) "удаляет весь путь до и включая последний разделитель пути (если есть)" и возвращает

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

используйте mapply, чтобы заменить этот результат для каждого элемента в url на "" и снова вызвать basename.

0 голосов
/ 31 января 2019

Вы можете использовать word, но вам нужно указать разделитель,

library(stringr)

word(url, -2, sep = '/')
#[1] "ani" "bmc"
0 голосов
/ 31 января 2019

Попробуйте это:

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
...