regex - 检索文件名的一部分

标签 regex r file filenames

我有许多具有以下格式的文件:

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, or 3)”部分,并且我认为 sub() 函数可以返回所有这些数字。我引用这些网址,herehere .

这是我尝试过的代码,但不起作用:

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")

关于regex - 检索文件名的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35620915/

相关文章:

C#将文本添加到文本文件而不重写它?

java - 从特定单词后开始读取文件

Javascript 常规 exp 无法正常工作

c# - 修复 RegEx Split() 函数 - 空字符串作为第一个条目

php - PHP 中的正则表达式 : how to match any A and IMG HTML tag including content

java - 获取第一组的正则表达式模式格式

r - knitr 在渲染 html 时将 (1) 更改为 <ol>?

R:写入前清除输出文件

r - 从 R 中的 coxph 中提取 pvalues 和 se(coef)

css - Django CSS 文件