如何用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
相关产品推荐
相关产品推荐

