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

如何用R语言提取文本中5个连续换行与2个连续换行之间的内容

问题原因

  • str_split() 返回结果为列表类型,而str_subset()要求输入原子向量,因此触发强制类型转换的警告
  • 将字符串按\n拆分后,每个拆分后的元素中已不存在\n字符,你编写的匹配\n{5}的正则规则完全无法生效

正确实现方案

推荐直接用正则提取,无需拆分字符串,代码如下:

library(stringr)
# 原始数据
data <- "line1\nline2\n\n\n\n\n         VICTIMS OF GUN VIOLENCE TO HOLD GUN TRAFFICKERS LIABLE\n\n  line3"
# 提取目标文本,先匹配5个换行后的内容,再去除前后空白
target_text <- str_trim(str_extract(data, "(?<=\\n{5})[\\s\\S]*?(?=\\n{2})"))

执行后target_text就是你需要的结果:"VICTIMS OF GUN VIOLENCE TO HOLD GUN TRAFFICKERS LIABLE"

正则规则说明

  • (?<=\\n{5}):后向断言,定位到连续5个换行符之后的位置
  • [\\s\\S]*?:非贪婪匹配所有字符(包含换行符,适配中间可能存在换行的场景)
  • (?=\\n{2}):前向断言,匹配到连续2个换行符之前的位置停止
  • str_trim():去除目标内容前后的多余空格、制表符等空白字符

如果你一定要用拆分字符串的方式实现,可以调整为如下代码:

library(stringr)
data <- "line1\nline2\n\n\n\n\n         VICTIMS OF GUN VIOLENCE TO HOLD GUN TRAFFICKERS LIABLE\n\n  line3"
# 取拆分后列表的第一个元素,转为原子向量
split_text <- str_split(data, "\n")[[1]]
# 过滤空字符串后取第三个元素,去除前后空白
target_text <- str_trim(split_text[split_text != ""][3])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:15:04