You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:06:35