首页 > 解决方案 > R中的stringr:当filename和filename.extension共享公共字符时从filename.extension中提取文件名

问题描述

我有一组'filename.extension',我只想提取文件名。当文件名与文件扩展名共享一个字符时,我无法提取完整的文件名。例如,filename.extension“qrs.sas7bdat”有

    filename="qrs"
    extension="sas7bdat"

在这种情况下,可以观察到文件名与扩展名共享字符“s”。

下面是一些 R 代码,以提供更多上下文:


files_sas <- c("abc.sas7bdat","qrs.sas7bdat")
stringr::str_extract(files_sas,"(?:.*|.*s)[^\\.sas7bdat]")

这组代码返回以下字符向量:

"abc" "qr" 

这不是我想要的——我想要的结果如下:

c("abc","qrs")

看起来我很接近了,所以我希望有人能帮助我得到我想要的结果。

非常感谢。

标签: rregexstringr

解决方案


我们可以使用sub来匹配.(.是匹配任意字符的元字符,所以我们转义 ( \\) iit ,后跟其他字符 ( .*),在替换中,我们可以指定空白 ( "")

sub("\\..*", "", files_sas)
#[1] "abc" "qrs"

或与stringr

library(stringr)
str_remove(files_sas, "\\..*")

或与file_path_sans_ext

tools::file_path_sans_ext(files_sas)
#[1] "abc" "qrs"

推荐阅读