使用 gsub 替换 R 中最后一次出现的字符串
Using gsub to replace last occurence of string in R
我有以下字符向量,我需要用 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"
匹配一个点、任意数量的数字、m
和字符串的末尾并将其替换为空字符串。请注意,我们在这里更喜欢 sub
而不是 gsub
,因为我们只对每个字符串的一个替换感兴趣。
sub("\.\d+m$", "", strings)
## [1] "x" "pm2.5.median" "rmin" "rmin" "rmax"
.*
模式匹配任意 0 个或多个字符,尽可能多。 \..*m$
模式匹配字符串中的第一个(最左边的).
,如果它以 m
.
结尾,则抓取它后面的所有文本
你需要
> sub("\.[^.]*m$", "", strings)
[1] "x" "pm2.5.median" "rmin" "rmin" "rmax"
此处,\.[^.]*m$
匹配 .
,然后匹配 0 个或多个除点以外的字符,然后匹配字符串末尾的 m
。
参见regex demo。
详情
\.
- 一个点(必须转义,否则它是一个特殊的正则表达式字符)
[^.]*
- 否定字符 class 匹配任何字符但 .
0 次或更多次
m
- 一个 m
字符
$
- 字符串结尾。
我有以下字符向量,我需要用 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"
匹配一个点、任意数量的数字、m
和字符串的末尾并将其替换为空字符串。请注意,我们在这里更喜欢 sub
而不是 gsub
,因为我们只对每个字符串的一个替换感兴趣。
sub("\.\d+m$", "", strings)
## [1] "x" "pm2.5.median" "rmin" "rmin" "rmax"
.*
模式匹配任意 0 个或多个字符,尽可能多。 \..*m$
模式匹配字符串中的第一个(最左边的).
,如果它以 m
.
你需要
> sub("\.[^.]*m$", "", strings)
[1] "x" "pm2.5.median" "rmin" "rmin" "rmax"
此处,\.[^.]*m$
匹配 .
,然后匹配 0 个或多个除点以外的字符,然后匹配字符串末尾的 m
。
参见regex demo。
详情
\.
- 一个点(必须转义,否则它是一个特殊的正则表达式字符)[^.]*
- 否定字符 class 匹配任何字符但.
0 次或更多次m
- 一个m
字符$
- 字符串结尾。