r gsub 和正则表达式,从 y*_x*_xxxx.csv 中删除 y*_x*

Posted

技术标签:

【中文标题】r gsub 和正则表达式,从 y*_x*_xxxx.csv 中删除 y*_x*【英文标题】:r gsub and regex, obating y*_x* from y*_x*_xxxx.csv 【发布时间】:2014-03-09 08:40:20 【问题描述】:

一般情况:我目前正在尝试根据从中检索到的 csv 文件来命名列表中的数据框,我发现使用 gsub 和正则表达式是可行的方法。不幸的是,我不能完全生产我需要的东西,只是有点。 我会非常感谢有经验的人提供一些提示,也许有一个合理的 R regex cheat cheet ?

文件名为 r2_m1_enzyme.csv,脚本应使用前 4 个字符来命名对应的数据帧 r2_m1,依此类推……

# generates a list of dataframes, to mimic a lapply(f,read.csv) output:
data <- list(data.frame(c(1,2)),data.frame(c(1,2)),data.frame(c(1,2)),data.frame(c(1,2)))

# this mimics file names obtained by  list.files() function
f <-c("r1_m1_enzyme.csv","r2_m1_enzyme.csv","r1_m2_enzyme.csv","r2_m2_enzyme.csv")

# this should name the data frames according to the csv file they have been derived from
names(data) <- gsub("r*_m*_.*","\\1", f)

但它没有按预期工作......它们被命名为 r2_m1_enzyme.csv 而不是所需的 r2_m1,尽管 .* 应该停止它?

如果我这样做:

names(data) <- gsub("r*_.*","\\1", f)

我确实得到了 r1、r2、r3 ...但我缺少第二个索引。

问题:所以我的问题是,什么正则表达式可以让我从名为 r*_m*_xyz.csv 的字符串

搜索历史: R 正则表达式使用 * 仅用于一个字符,Gsub 正则表达式替换,R 使用文件名的一部分来命名数据框,R 正则表达式备忘单,...

【问题讨论】:

【参考方案1】:

如果你的名字总是五个字符,你可以使用substr

substr(f, 1, 5)

如果您想使用gsub,您必须对您的表达式进行分组(通过()),因为\\1 指的是第一个组并插入其内容,例如:

gsub("^(r[0-9]+_m[0-9]+).*", "\\1", f)

【讨论】:

以上是关于r gsub 和正则表达式,从 y*_x*_xxxx.csv 中删除 y*_x*的主要内容,如果未能解决你的问题,请参考以下文章

类和正则表达(自动更正 代数运算)

类和正则表达

如何在 R 中使用 gsub 从字符串中删除非数字字符?

在 R 正则表达式的字符类中使用速记字符类

删除 R 中除撇号外的所有标点符号

在 Ruby gsub 块中使用命名的捕获组(正则表达式)