我有许多具有以下格式的文件:
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()
函数可以返回所有这些数字。我在这里和这里都引用了这些URL 。
这是我尝试的代码,无法正常工作:
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"
为此,我们可以gsub
通过匹配所有字符,直到sess
其后跟_
或|
以开头的字符,_
大写字母,后跟字符(.*
)直到字符串($
)的末尾,然后替换为来做到这一点''
。
gsub('^.*sess\\_|\\_[A-Z]+.*$', '', str1)
#[1] "2"
或使用str_extract
,它将更加紧凑。默认情况下,str_extract
仅提取匹配的第一个匹配项。在这里,我们提取\\d+
正则表达式环顾四周((?<=sess_)
)之后的数字()。
library(stringr)
str_extract(str1, '(?<=sess_)\\d+')
#[1] "2"
str1 <- "sub_41_sess_2_ABCxyz_23Feb2016_2932.txt")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句