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

R中存在多重复分隔符时,如何提取指定位置的子字符串?

提取多重复分隔符字符串指定位置的子串

此前已有提取分隔符间子串的相关问题,但未覆盖多重复分隔符下指定提取某一段的场景。现有如下向量:

vec <- c("Europe/Germany/Berlin/Mitte", 
         "Europe/Germany/Berlin/Charlottenburg", 
         "Europe/Croatia/Zagreb/Gornji Grad", 
         "Europe/Croatia/Zagreb/Donji Grad")

需要实现两个函数:

  1. 第一个函数输出:c("Germany", "Germany", "Croatia", "Croatia")
  2. 第二个函数输出:c("Berlin", "Berlin", "Zagreb", "Zagreb")

解决方案

函数1:提取第2段子串

推荐用stringr包的分割函数,按/分割后直接取第2列,简单直观:

library(stringr)

get_second_segment <- function(input_vec) {
  # 按/分割为最多4段,取第2列
  str_split_fixed(input_vec, "/", n = 4)[, 2]
}

# 调用验证
get_second_segment(vec)
# 输出结果:[1] "Germany" "Germany" "Croatia" "Croatia"

也可以用正则表达式匹配,精准定位第一个/后、第二个/前的内容:

get_second_segment_regex <- function(input_vec) {
  str_extract(input_vec, "(?<=/)[^/]+(?=/)")
}

函数2:提取第3段子串

同样用分割法,取分割后的第3列:

get_third_segment <- function(input_vec) {
  str_split_fixed(input_vec, "/", n = 4)[, 3]
}

# 调用验证
get_third_segment(vec)
# 输出结果:[1] "Berlin"  "Berlin"  "Zagreb"  "Zagreb"

正则方式则匹配第二个/后、第三个/前的内容:

get_third_segment_regex <- function(input_vec) {
  str_extract(input_vec, "(?<=/[^/]+/)[^/]+")
}

核心思路

当字符串存在重复分隔符时,两种常用方法:

  • 分割索引法:将字符串按分隔符分割成矩阵,直接通过索引选取目标段,适合结构固定的字符串。
  • 正则定位法:通过正向/反向断言,精准锁定目标段前后的分隔符位置,灵活度更高。

内容的提问来源于Stack Exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:35:17