我有以下文件的列表
a_file.csv
another_file.csv
a_third_file.csv
我想编写一个函数,该函数将仅paste
前的文本_file.csv
,这样上面的字符串就可以了。
a
another
a_third
如何使用stringr
来做到这一点?
答案 0 :(得分:2)
只是因为您明确要求,所以这里是一个str_extract_all()
解决方案。您需要使用所谓的“ positive lookahead”。
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" ""
@Joel的答案,即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"
IMO将单个字符向量作为返回值更加简洁。三种选择:
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"
答案 1 :(得分:1)