我有以下文件的列表
a_file.csv
another_file.csv
a_third_file.csv
我想编写一个函数,该函数paste仅包含之前的文本_file.csv,因此上面的字符串将是。
a
another
a_third
我怎样才能做到这一点stringr?
\n只是因为您明确要求,所以这是一个str_extract_all()解决方案。您需要使用所谓的 \xe2\x80\x9c正向前瞻\xe2\x80\x9d。
library(stringr)\n\nx <- c("a_file.csv", "another_file.csv", "a_third_file.csv")\n\nstr_extract_all(x, regex(".*(?=_file.csv)"))\n#> [[1]]\n#> [1] "a" "" \n#> \n#> [[2]]\n#> [1] "another" "" \n#> \n#> [[3]]\n#> [1] "a_third" ""\nRun Code Online (Sandbox Code Playgroud)\n\n@Joel\xe2\x80\x99s 答案,即str_split,当然更简洁,也更快。我在这里使用fixed(),因为我们匹配的是固定字符串,而不是正则表达式。
str_split(x, fixed("_file.csv"))\n#> [[1]]\n#> [1] "a" "" \n#> \n#> [[2]]\n#> [1] "another" "" \n#> \n#> [[3]]\n#> [1] "a_third" ""\nRun Code Online (Sandbox Code Playgroud)\n\nutils::strsplit()当然,base R 或者更确切地说 the也可以做到这一点,但请注意空字符串消失了。
strsplit(x, "_file.csv", fixed = TRUE)\n#> [[1]]\n#> [1] "a"\n#> \n#> [[2]]\n#> [1] "another"\n#> \n#> [[3]]\n#> [1] "a_third"\nRun Code Online (Sandbox Code Playgroud)\n\n在我看来,单个字符向量作为返回值更加简洁。三种选择:
\n\nstr_extract()具有积极的前瞻性。str_extract(x, regex(".*(?=_file.csv)"))\n#> [1] "a" "another" "a_third"\nRun Code Online (Sandbox Code Playgroud)\n\nstr_replace(x, fixed("_file.csv"), "")\n#> [1] "a" "another" "a_third"\nRun Code Online (Sandbox Code Playgroud)\n\nbase::gsub()gsub("_file.csv", "", x, fixed = TRUE)\n#> [1] "a" "another" "a_third"\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |