R - 根据模式处理字符串

时间:2015-10-24 03:27:29

标签: regex r string

这是我在R上的文件名:

> lst.files[1]
[1] "clt_Amon_CanESM2_rcp45_185001-230012.nc"

我需要做的是捕获直到第4个下划线(包括)的部分,所以它会是这样的:

clt_Amon_CanESM2_rcp45_

我怎样才能在R中找到它?

3 个答案:

答案 0 :(得分:2)

使用qdap包,您可以执行以下操作。

x <- "clt_Amon_CanESM2_rcp45_185001-230012.nc"

library(qdap)
beg2char(x, "_", 4, include = TRUE)
# [1] "clt_Amon_CanESM2_rcp45_"

答案 1 :(得分:2)

如果你知道你总是(至少)有四个下划线,那么你可以这样做:

regmatches(lst, regexec(".*_.*_.*_.*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"

如果第二部分可能不总是四个,但没有下划线,你可以这样做:

regmatches(lst, regexec(".*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"

这不需要任何额外的包,只需要基础R。

答案 2 :(得分:2)

我们还可以使用sub将重复模式捕获为一组。我们匹配不是下划线(^)后跟下划线([^_]+)的字符串开头(\\_)的另外一个字符,重复4次({{ 1}}),通过括起括号后跟零个或多个字符({4})将其捕获为一个组。我们用捕获组(.*)替换它以获得预期的输出。

\\1

数据

sub('^(([^_]+\\_){4}).*', '\\1', str1)
#[1] "clt_Amon_CanESM2_rcp45_"