我有许多文件格式如下:
sub_(number 1 to 60)_ sess_(number 1, 2, or 3)_ (some letters)_ DDMMMYYYY_(some number with either 3 or 4 digit).txt
例如:
sub_41_sess_2_ABCxyz_23Feb2016_2932.txt
我想在'sess_'部分后只检索'(1,2或3)'部分,我认为sub()
函数可以返回所有这些数字。我引用了这些网址here和here。
这是我尝试的代码,但没有用:
dir <- "path/"
filelist = list.files(path = dir, pattern = ".*.txt")
filelist
for (f in filelist) {
sess_id <- sub("^(sub_[1-60])^(_sess_)(1 |2 |3)^.*","\\1",c(f), perl = TRUE)
}
sess_id
返回的是一个如下所示的文件名:
[1] "subject_9_4Feb2016_1611.txt"
我期待下面的内容,因为我需要每个sess_id
成为上述整体文件格式的文件的属性。
[1] "1" or [1] "2"
答案 0 :(得分:1)
这意味着您需要在第三个&#34; _&#34;之后的所有内容。如果是这样的话
加载stringr
包
library(stringr)
a<-"sub_41_sess_2_ABCxyz_23Feb2016_2932.txt"
str_sub(a, start=str_locate_all(a, "_")[[1]][3]+1, end = str_locate_all(a, "_")[[1]][3]+1 )
[1] "2"
答案 1 :(得分:1)
我们可以使用vm.showModal = function() {
$('#detailsModal').modal('show');
};
匹配所有字符,直到gsub
后跟sess
或_
以|
开头的字符,然后匹配大写字母后跟字符(_
),直到字符串结尾(.*
),并替换为$
。
''
或者使用gsub('^.*sess\\_|\\_[A-Z]+.*$', '', str1)
#[1] "2"
,它会更加紧凑。默认情况下,str_extract
仅提取匹配的第一个匹配项。在这里,我们提取正则表达式(str_extract
)后面的数字(\\d+
)。
(?<=sess_)
library(stringr)
str_extract(str1, '(?<=sess_)\\d+')
#[1] "2"