我有以下字符向量,而不需要用gsub
进行修改。
strings <- c("x", "pm2.5.median", "rmin.10000m", "rmin.2500m", "rmax.5000m")
已过滤strings
的所需输出:
"x", "pm2.5.median", "rmin", "rmin", "rmax"
我当前的尝试适用于除pm2.5.median
字符串以外的所有字符串,该字符串具有需要保留的点。我真的只是想删除附加到每个变量末尾的缓冲区大小,例如1000m
,2500m
,5000m
,7500m
和10000m
。
gsub("\\..*m$", "", strings)
"x", "pm2", "rmin", "rmin", "rmax"
答案 0 :(得分:4)
匹配一个点,任意数量的数字m
和字符串的结尾,并将其替换为空字符串。请注意,此处我们更喜欢sub
而不是gsub
,因为我们只希望每个字符串替换一个。
sub("\\.\\d+m$", "", strings)
## [1] "x" "pm2.5.median" "rmin" "rmin" "rmax"
答案 1 :(得分:2)
.*
模式匹配任意0个或更多字符,并尽可能匹配。 \..*m$
模式与字符串中的第一个(最左边的).
相匹配,如果它以m
结尾,则抓取其后的所有文本。
您需要
> sub("\\.[^.]*m$", "", strings)
[1] "x" "pm2.5.median" "rmin" "rmin" "rmax"
在这里,\.[^.]*m$
匹配.
,然后是0个或多个除点号之外的字符,然后是字符串末尾的m
。
请参见regex demo。
详细信息
\.
-点(必须转义,因为它是特殊的正则表达式字符)[^.]*
-否定的字符类,与除.
之外的0个或更多字符相同的任何字符m
-一个m
字符$
-字符串的结尾。