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

如何在R中用正则表达式提取字符串中所有连续4字符子串

问题背景

需要从字符串中提取所有符合规则的连续4字符子串,示例如下:

  • 输入字符串:ghijklm
  • 期望返回结果:'ghij'、'hijk'、'ijkl'、'jklm'

现有运行代码仅能返回第一个匹配到的4字符子串:

library(stringr)
library(dplyr)
text1 <- 'ghijklm'
text1 %>% stringr::str_match('\\w{4}')
# 返回结果
#       [,1]  
# [1,] "ghij"
调整方案

你当前只拿到单个结果是因为str_match默认仅返回第一次匹配结果,且普通正则匹配会消耗已匹配的字符,无法实现滑动取连续子串的效果。可以使用正向零宽断言配合全匹配函数解决:

text1 %>% 
  # (?=(\\w{4})) 为正向零宽先行断言,匹配时不消耗字符,可逐个位置向后滑动识别4字符子串
  stringr::str_match_all('(?=(\\w{4}))') %>% 
  # 提取匹配结果中的目标子串维度
  .[[1]] %>% 
  .[,2]

运行后即可得到预期结果:"ghij" "hijk" "ijkl" "jklm"

如果不想使用正则,也可以用滑动窗口函数实现:

library(zoo)
text1 %>% 
  # 拆分字符串为单个字符向量
  strsplit("") %>% 
  .[[1]] %>% 
  # 窗口宽度设为4,滑动拼接字符
  rollapply(width = 4, FUN = paste, collapse = "")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:15:02