如何使用 R 中的模式对 char 向量进行子字符串化?
How to substring a char vector using patterns in R?
我有这种字符向量:
"MODIS.evi.2013116.yL2.BOKU.tif"
矢量中间的数字会发生变化。 evi
有时会变成 ndvi
。
我想使用 substr
(或其他函数,可能)在第二点之后对向量进行子字符串化:.
,即,只取 2013116.yL2.BOKU.tif
,甚至当字符串是 MODIS.evi.2013116.yL2.BOKU.tif
或 MODIS.ndvi.2013116.yL2.BOKU.tif
.
我们可以使用 sub
来匹配一个或多个字符的两个实例,这些字符不是 .
后跟 .
从开始 (^
)字符串并将其替换为空白 (""
)
sub("^([^.]+\.){2}", "", str1)
#[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"
如果要保留的模式总是以数字开头,那么上面可以简化为只匹配一个或多个非数字字符,并从字符串的开头(^
)替换为空白
sub("^\D+", "", str1)
#[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"
数据
str1 <- c("MODIS.evi.2013116.yL2.BOKU.tif", "MODIS.ndvi.2013116.yL2.BOKU.tif")
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])
这将删除 s
中的所有前导非数字字符:
sub("^\D*", "", s)
如果s
如末尾的注释那么上面运行的结果是:
[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"
注:
s <- c("MODIS.evi.2013116.yL2.BOKU.tif", "MODIS.ndvi.2013116.yL2.BOKU.tif")
我有这种字符向量:
"MODIS.evi.2013116.yL2.BOKU.tif"
矢量中间的数字会发生变化。 evi
有时会变成 ndvi
。
我想使用 substr
(或其他函数,可能)在第二点之后对向量进行子字符串化:.
,即,只取 2013116.yL2.BOKU.tif
,甚至当字符串是 MODIS.evi.2013116.yL2.BOKU.tif
或 MODIS.ndvi.2013116.yL2.BOKU.tif
.
我们可以使用 sub
来匹配一个或多个字符的两个实例,这些字符不是 .
后跟 .
从开始 (^
)字符串并将其替换为空白 (""
)
sub("^([^.]+\.){2}", "", str1)
#[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"
如果要保留的模式总是以数字开头,那么上面可以简化为只匹配一个或多个非数字字符,并从字符串的开头(^
)替换为空白
sub("^\D+", "", str1)
#[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"
数据
str1 <- c("MODIS.evi.2013116.yL2.BOKU.tif", "MODIS.ndvi.2013116.yL2.BOKU.tif")
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])
这将删除 s
中的所有前导非数字字符:
sub("^\D*", "", s)
如果s
如末尾的注释那么上面运行的结果是:
[1] "2013116.yL2.BOKU.tif" "2013116.yL2.BOKU.tif"
注:
s <- c("MODIS.evi.2013116.yL2.BOKU.tif", "MODIS.ndvi.2013116.yL2.BOKU.tif")