首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R中的模式对字符向量进行子串?

如何使用R中的模式对字符向量进行子串?
EN

Stack Overflow用户
提问于 2017-03-23 13:57:34
回答 3查看 95关注 0票数 1

我有这样一种字符向量:

代码语言:javascript
复制
"MODIS.evi.2013116.yL2.BOKU.tif"

矢量中间的数字会变的。evi这个词有时会变成ndvi

我想使用substr (或者其他函数,可能)在第二点之后对向量进行子字符串:.,即接受2013116.yL2.BOKU.tif,即使字符串是MODIS.evi.2013116.yL2.BOKU.tifMODIS.ndvi.2013116.yL2.BOKU.tif

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-23 13:59:34

我们可以使用sub来匹配一个或多个字符的两个实例,这些字符不是.,后面跟着字符串的起始(^)的.,并将其替换为空("")。

代码语言:javascript
复制
sub("^([^.]+\\.){2}", "", str1)
#[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"

如果要保持的模式总是以数字开头,则可以将上面的模式简化为只匹配一个或多个非数字字符,并从字符串的开始(^)开始用空白替换它。

代码语言:javascript
复制
sub("^\\D+", "", str1)
#[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"

数据

代码语言:javascript
复制
str1 <- c("MODIS.evi.2013116.yL2.BOKU.tif", "MODIS.ndvi.2013116.yL2.BOKU.tif")
票数 1
EN

Stack Overflow用户

发布于 2017-03-23 14:02:38

代码语言:javascript
复制
l = c("MODIS.evi.2013116.yL2.BOKU.tif","MODIS.ndvi.2013116.yL2.BOKU.tif")
sapply(l, function(x) strsplit(x, "vi.", fixed = T)[[1]][2])
票数 1
EN

Stack Overflow用户

发布于 2017-03-23 14:15:44

这将删除s中的所有前导非数字字符:

代码语言:javascript
复制
sub("^\\D*", "", s)

如果s和最后的注释一样,那么运行上面的结果是:

代码语言:javascript
复制
[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"

注:

代码语言:javascript
复制
s <- c("MODIS.evi.2013116.yL2.BOKU.tif", "MODIS.ndvi.2013116.yL2.BOKU.tif")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42978205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档