如何在R语言中不使用stringr包获取字符串中模式的首尾字符位置?
在R语言中不使用stringr包获取模式的首尾匹配位置
针对你需要提取字符串中连续匹配块的首尾位置(以及单独匹配项的位置)的需求,可以通过以下步骤实现:
实现思路
- 先用
gregexpr()获取所有匹配模式的位置; - 识别连续匹配的分组(相邻位置差为1则属于同一组);
- 对每个分组提取首尾位置,合并得到最终结果。
示例代码
# 目标字符串 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
相关产品推荐
相关产品推荐

