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

如何在R语言中不使用stringr包获取字符串中模式的首尾字符位置?

在R语言中不使用stringr包获取模式的首尾匹配位置

针对你需要提取字符串中连续匹配块的首尾位置(以及单独匹配项的位置)的需求,可以通过以下步骤实现:

实现思路

  1. 先用gregexpr()获取所有匹配模式的位置;
  2. 识别连续匹配的分组(相邻位置差为1则属于同一组);
  3. 对每个分组提取首尾位置,合并得到最终结果。

示例代码

# 目标字符串
target_str <- "10000110"

# 获取所有"0"的匹配位置
pos <- unlist(gregexpr('0', target_str))

# 拆分连续匹配的分组
groups <- split(pos, cumsum(c(1, diff(pos) != 1)))

# 提取每个分组的首尾元素
result <- unlist(lapply(groups, function(x) {
  if (length(x) == 1) {
    x
  } else {
    c(x[1], x[length(x)])
  }
}))

# 输出结果
result

运行结果

[1] 2 5 8

代码解释

  • gregexpr('0', target_str)返回所有"0"的位置,用unlist()转换为向量;
  • diff(pos)计算相邻位置的差值,cumsum(c(1, diff(pos) != 1))为每个位置分配分组ID;
  • split()按分组ID拆分位置向量,得到每个连续匹配块的位置集合;
  • 遍历每个分组,若分组只有一个元素则直接保留,否则取首尾元素,最终合并为结果向量。

内容的提问来源于stack exchange,提问作者doraemon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:07:44