R语言如何提取字符串中第二个大写字母前的子串
R提取字符串中第二个大写字符前的子串
没有专门封装的单功能内置函数,但用基础R的字符串处理函数或者常用字符串处理包,几行代码就能实现需求,示例输入输出对应如下:
- 测试输入:
Example <- "MonkeysDogsCats" - 预期输出:
"Monkeys"
方法1:基础R实现(无需安装第三方包)
简洁正则写法
直接用sub()做正则替换,适配常规场景:
Example <- "MonkeysDogsCats" res <- sub("^([A-Z][^A-Z]*).*", "\\1", Example) res # > res # [1] "Monkeys"
兼容边界情况的写法
如果需要处理字符串中大写字母不足2个、无大写字母的特殊场景,可以写简单的自定义函数:
get_pre_second_upper <- function(s) { upper_locs <- gregexpr("[A-Z]", s)[[1]] # 大写字母数量小于2时直接返回原字符串 if (length(upper_locs) < 2 || upper_locs[1] == -1) return(s) # 从开头截取到第二个大写字母的前一位 substr(s, 1, upper_locs[2] - 1) } # 测试用例 get_pre_second_upper("MonkeysDogsCats") # [1] "Monkeys" get_pre_second_upper("Apple") # 仅1个大写,返回[1] "Apple" get_pre_second_upper("test123") # 无大写,返回[1] "test123"
方法2:stringr包实现
如果日常使用tidyverse生态的字符串处理包stringr,写法更简洁:
library(stringr) Example <- "MonkeysDogsCats" str_extract(Example, "^[A-Z][^A-Z]*") # [1] "Monkeys"
正则逻辑说明:
^[A-Z]匹配字符串开头的第一个大写字母,[^A-Z]*匹配后续所有连续的非大写字符,匹配范围自动截止到第二个大写字符出现的前一位,刚好符合需求。
内容的提问来源于stack exchange,提问作者user18632888
相关产品推荐
相关产品推荐

