如何从字符向量r

时间:2016-10-10 15:42:24

标签: r regex grep extract

这是三个字符向量:

[1] "Session_1/Focal_1_P1/240915_P1_S1_F1.csv"
[2] "Session_2/Focal_1_PA10/250915_PA10_S2_F1.csv"
[3] "Session_3/Focal_1_DA100/260915_DA100_S3_F1.csv"

我试图以标准化方式分别提取字符串P1PA10DA100(因为我有几百个其他字符串,我想要提取此

我知道我需要使用regex,但我对它很新,并不确定是哪一个。

我可以看到共同点是6个数字(\d\d\d\d\d\d),然后是_,然后我想要的是另一个_

如何提取我想要的内容?我相信grep,但我不需要100%正则表达式。

1 个答案:

答案 0 :(得分:2)

我们可以使用gsub。我们匹配零个或多个字符(.*)后跟正斜杠(\\/),后跟一个或多个数字和下划线(\\d+_)或(! )下划线的两个实例,后跟一个或多个不是下划线((_[^_]+){2})的字符,并将其替换为空白("")。

gsub(".*\\/\\d+_|(_[^_]+){2}", "", v1)
#[1] "P1"    "PA10"  "DA100"

或者我们提取向量的basename,匹配一个或多个数字后跟下划线(\\d+_),后跟不是下划线(([^_]+))的字符作为捕获组,后跟直到字符串结尾的字符,并将其替换为捕获组的反向引用(\\1)。

sub("\\d+_([^_]+).*", "\\1", basename(v1))
#[1] "P1"    "PA10"  "DA100"

数据

v1 <- c( "Session_1/Focal_1_P1/240915_P1_S1_F1.csv",
       "Session_2/Focal_1_PA10/250915_PA10_S2_F1.csv",
       "Session_3/Focal_1_DA100/260915_DA100_S3_F1.csv")