#r #regex
#r #регулярное выражение
Вопрос:
Как я могу извлечь числа / идентификатор из следующей строки в R?
link <- "D:/temp/sample_data/0000098618-13-000011.htm"
Я хочу просто извлечь 0000098618-13-000011
То есть отбросить .htm
и D:/temp/sample_data/
.
Я пробовал grep и gsub без особой удачи.
Ответ №1:
1) Используйте basename
базовое имя, за которым следует sub
:
sub("\..*", "", basename(link))
## [1] "0000098618-13-000011"
2) file_path_sans_ext
library(tools)
file_path_sans_ext(link)
## [1] "0000098618-13-000011"
3) sub
sub(".*/(.*)\..*", "\1", link)
## [1] "0000098618-13-000011"
4) gsub
gsub(".*/|\.[^.]*$", "", link)
## [1] "0000098618-13-000011"
5) strsplit
sapply(strsplit(link, "[/.]"), function(x) tail(x, 2)[1])
## [1] "0000098618-13-000011"
6) прочитайте.таблицу. Если link
это вектор, это будет работать только в том случае, если все элементы имеют одинаковое количество компонентов, разделенных /. Также предполагается, что единственная точка — это точка, разделяющая расширение.
DF <- read.table(text = link, sep = "/", comment = ".", as.is = TRUE)
DF[[ncol(DF)]]
## [1] "0000098618-13-000011"
Комментарии:
1. Спасибо! что делает
basename
функция?2. Или просто
tools::file_path_sans_ext(basename("foo/bar/quux.html"))
.3. Это работает со всем набором данных, но
basename
для меня это ново.4. Посмотрите на
?basename
.5. Или
basename
—dirname
комбинация:dirname(chartr(".", "/", basename(link)))
Ответ №2:
Используя stringr
:
library(stringr)
str_extract(link , "[0-9-] ")
# "0000098618-13-000011"