如何在R语言中按分隔符“-”提取字符串的最右侧部分?
提取分隔符最右侧字符串的可行方案
针对你给出的SKU向量:
SKU <- c("PPM-UA-L", "RVK-JI-XL", "KMN-WO-XS", "YYL-S")
原固定索引的写法无法适配分隔符数量不一致的情况,以下是几种可靠的解决方案:
方法1:用stringr::str_extract(推荐)
利用正则表达式直接匹配最后一个-之后的内容,一步到位:
library(stringr) size <- str_extract(SKU, "(?<=-)[^-]+$")
正则说明:
(?<=-):正向预查,确保目标内容前有一个-[^-]+:匹配任意非-的字符(至少一个)$:匹配字符串末尾,保证取到的是最后一段
方法2:基于str_split的灵活取值
如果想继续用str_split,可以遍历拆分后的结果,取每个列表元素的最后一项:
size <- sapply(str_split(SKU, "-"), tail, n = 1) # 要是用tidyverse的purrr包,还能更简洁: # size <- purrr::map_chr(str_split(SKU, "-"), last)
方法3:Base R原生实现(无需额外包)
用基础函数组合实现,不需要加载第三方包:
# 找到每个字符串中最后一个"-"的位置 last_dash_pos <- sapply(gregexpr("-", SKU), tail, n = 1) # 从该位置的下一位开始提取字符串 size <- substring(SKU, last_dash_pos + 1)
以上三种方法运行后,得到的size结果均为:"L" "XL" "XS" "S",完全适配所有情况。
内容的提问来源于stack exchange,提问作者SilverSpringbb
相关产品推荐
相关产品推荐

