У меня простой, но сложный вопрос (по крайней мере для меня)!
Я хотел бы извлечь часть строки, как в этом примере:
Из этой строки:
name <- "C:/Users/admin/Desktop/test/plots/"
К этому:
name <- "test/plots/"
Сюжетный поворот моей проблемы в том, что имена меняются. Так что это не всегда «тест/графики/», это может быть «abc/ccc/» или «m.project/plots/» и так далее.
В моем воображении я бы использовал что-то, чтобы найти последние два «/» в строке и вырезать части текста. Но я понятия не имею, как это сделать!
Спасибо за вашу помощь и время!
С {stringr} при условии, что путь содержит папки только с буквами нижнего регистра. Вы можете настроить альтернативы в квадратных скобках по мере необходимости, например, если имена каталогов содержат сочетание букв верхнего и нижнего регистра, используйте [.A-z]
Проверьте ссылку на регулярное выражение для параметров:
name <- c("C:/Users/admin/Desktop/m.project/plots/",
"C:/Users/admin/Desktop/test/plots/")
library(stringr)
str_extract(name, "[.a-z]+/[.a-z]+/$")
#> [1] "m.project/plots/" "test/plots/"
Created on 2022-03-22 by the reprex package (v2.0.1)
@benson23: Верно. Упс, извините, я пропустил это требование в вопросе. Скорректировали ответ. Спасибо за указание на это.
Используйте str_split
, чтобы разделить свой путь на /
. Затем извлеките первые три элемента после обращения строки и paste
верните /
с помощью аргумента collapse
.
library(stringr)
name <- "C:/Users/admin/Desktop/m.project/plots/"
paste0(rev(rev(str_split(name, "\/", simplify = T))[1:3]), collapse = "/")
[1] "m.project/plots/"
Поскольку ваш путь может содержать символы/цифры/символы, [^/]+/[^/]+/$
может быть лучше, что соответствует всему, что не является /
.
library(stringr)
str_extract(name, "[^/]+/[^/]+/$")
[1] "m.project/plots/"
не подойдет
m.project/plots/