Regex 基于模式的R-操作字符串
这是我在R上的文件名:Regex 基于模式的R-操作字符串,regex,r,string,Regex,R,String,这是我在R上的文件名: > lst.files[1] [1] "clt_Amon_CanESM2_rcp45_185001-230012.nc" 我需要做的是只捕获第四个下划线(包括)之前的部分,所以它是这样的: clt_Amon_CanESM2_rcp45_ regmatches(lst, regexec(".*_.*_.*_.*_", lst.files[1]))[[1]] # [1] "clt_Amon_CanESM2_rcp45_" regmatches(lst, regex
> lst.files[1]
[1] "clt_Amon_CanESM2_rcp45_185001-230012.nc"
我需要做的是只捕获第四个下划线(包括)之前的部分,所以它是这样的:
clt_Amon_CanESM2_rcp45_
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中获取此信息?使用
qdap
包,您可以执行以下操作
x <- "clt_Amon_CanESM2_rcp45_185001-230012.nc"
library(qdap)
beg2char(x, "_", 4, include = TRUE)
# [1] "clt_Amon_CanESM2_rcp45_"
x使用qdap
包,您可以执行以下操作
x <- "clt_Amon_CanESM2_rcp45_185001-230012.nc"
library(qdap)
beg2char(x, "_", 4, include = TRUE)
# [1] "clt_Amon_CanESM2_rcp45_"
x如果你知道你总是(至少)有四个下划线,那么你可以这样做:
clt_Amon_CanESM2_rcp45_
regmatches(lst, regexec(".*_.*_.*_.*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"
regmatches(lst, regexec(".*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"
如果第二部分中可能不总是四个下划线,但没有下划线,则可以执行以下操作:
clt_Amon_CanESM2_rcp45_
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为基数。如果您知道您总是(至少)有四个下划线,那么您可以这样做:
clt_Amon_CanESM2_rcp45_
regmatches(lst, regexec(".*_.*_.*_.*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"
regmatches(lst, regexec(".*_", lst.files[1]))[[1]]
# [1] "clt_Amon_CanESM2_rcp45_"
如果第二部分中可能不总是四个下划线,但没有下划线,则可以执行以下操作:
clt_Amon_CanESM2_rcp45_
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。我们还可以使用sub
将重复模式作为一个组捕获。我们从字符串的开头(^
)再匹配一个字符,该字符串不是下划线([^\+
),后跟一个下划线(\\\\
),该下划线重复4次({4}
),通过用括号括起来,后跟零个或多个字符(*
)将其作为一个组捕获。我们将其替换为捕获组(\\1
),以获得预期的输出
sub('^(([^_]+\\_){4}).*', '\\1', str1)
#[1] "clt_Amon_CanESM2_rcp45_"
数据
str1我们还可以使用sub
将重复模式作为一个组捕获。我们从字符串的开头(^
)再匹配一个字符,该字符串不是下划线([^\+
),后跟一个下划线(\\\\
),该下划线重复4次({4}
),通过用括号括起来,后跟零个或多个字符(*
)将其作为一个组捕获。我们将其替换为捕获组(\\1
),以获得预期的输出
sub('^(([^_]+\\_){4}).*', '\\1', str1)
#[1] "clt_Amon_CanESM2_rcp45_"
数据
str1回答得很好,但我更喜欢使用R的本机命令。我已经加载了太多的包,最终我会在一些命令之间产生冲突:d这个函数对我来说是新的+1@akrun我很高兴你发现这很有用。:)@爵士乐我在书中记下了这一点,以便下次使用:-)哇,你完成了超过7000个复习任务,令人印象深刻!回答得很好,但我更喜欢使用R的本地命令。我已经加载了太多的包,最终我会在一些命令之间产生冲突:d这个函数对我来说是新的+1@akrun我很高兴你发现这很有用。:)@爵士乐我在书中记下了这一点,以便下次使用:-)哇,你完成了超过7000个复习任务,令人印象深刻!