如何用substr()函数从右向左提取子串?有无更简便方法?
如何从右侧提取字符串子串(替代反转的快捷方法)?
你提到的substr()本身不支持直接指定从右向左提取,但有几种比反转字符串更简洁的实现方式,针对提取最后4个字符的需求,推荐以下方法:
方法1:Base R 结合 nchar() 计算起始位置
通过字符串总长度反推起始索引,直接用substr()实现:
x <- "123456gerger7" answer <- substr(x, nchar(x) - 3, nchar(x))
nchar(x)获取字符串总长度,减去3是因为要取4个字符(起始位置 = 总长度 - 3),结束位置设为总长度,就能直接提取最后4个字符。
方法2:使用stringr包的str_sub()(推荐)
stringr包的str_sub()支持负索引,负号代表从字符串右侧开始计数,用法非常直观:
# 首次使用需安装包 install.packages("stringr") library(stringr) x <- "123456gerger7" answer <- str_sub(x, -4, -1)
-4对应倒数第4个字符的位置,-1对应最后一个字符,一行代码就能得到目标子串。
方法3:Base R 正则表达式方法
用sub()配合正则匹配末尾的4个字符:
x <- "123456gerger7" answer <- sub(".*(.{4})$", "\\1", x)
正则逻辑:.*匹配任意长度的前置字符,(.{4})$捕获末尾4个字符为分组,\\1引用该分组,从而提取目标内容。
这些方法都无需处理字符串反转,比你之前的方案更高效简洁。
内容的提问来源于stack exchange,提问作者SiuMai2k22
相关产品推荐
相关产品推荐

