Только потому, что вы явно спросили, вот решение str_extract_all()
. Вам нужно использовать так называемый « позитивный взгляд ».
library(stringr)
x <- c("a_file.csv", "another_file.csv", "a_third_file.csv")
str_extract_all(x, regex(".*(?=_file.csv)"))
#> [[1]]
#> [1] "a" ""
#>
#> [[2]]
#> [1] "another" ""
#>
#> [[3]]
#> [1] "a_third" ""
@ Ответ Джоэла, т. Е. str_split
, конечно, более лаконичен и быстрее. Я использую fixed()
здесь, так как мы сопоставляем фиксированную строку, а не регулярное выражение.
str_split(x, fixed("_file.csv"))
#> [[1]]
#> [1] "a" ""
#>
#> [[2]]
#> [1] "another" ""
#>
#> [[3]]
#> [1] "a_third" ""
base R или, точнее, utils::strsplit()
, может, конечно, делать то же самое, но обратите внимание, что пустые строки пропали.
strsplit(x, "_file.csv", fixed = TRUE)
#> [[1]]
#> [1] "a"
#>
#> [[2]]
#> [1] "another"
#>
#> [[3]]
#> [1] "a_third"
Единственный символьный вектор в качестве возвращаемого значения еще более сжат, ИМО. Три альтернативы:
str_extract()
с положительным прогнозом.
str_extract(x, regex(".*(?=_file.csv)"))
#> [1] "a" "another" "a_third"
- Вместо того, чтобы извлечь нужные строки, вы также можете заменить / удалить ненужные строки.
str_replace(x, fixed("_file.csv"), "")
#> [1] "a" "another" "a_third"
- Та же стратегия с
base::gsub()
gsub("_file.csv", "", x, fixed = TRUE)
#> [1] "a" "another" "a_third"