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

如何在R中提取混合中英文本的指定类别内容(含换行替换)

解决方法

可以借助stringr包的正则匹配功能实现需求,以下是两种可行方案:

方案一:先预处理Class4换行,再提取各分类

  1. 先把Class4区块内的换行替换成逗号:
library(stringr)
# 替换Class4到Class5之间的换行为逗号
a_processed <- str_replace_all(a, "(?<=Class4:)(.*?)(?=\\nClass5:)", function(x) str_replace_all(x, "\\n", ","))
  1. 提取各个Class的内容:
Class1 <- str_extract(a_processed, "(?<=Class1:).*?(?=\\nClass2:)")
Class2 <- str_extract(a_processed, "(?<=Class2:).*?(?=\\nClass3:)")
Class3 <- str_extract(a_processed, "(?<=Class3:).*?(?=\\nClass4:)")
Class4 <- str_extract(a_processed, "(?<=Class4:).*?(?=\\nClass5:)")
Class5 <- str_extract(a_processed, "(?<=Class5:).*")

方案二:单独提取并处理Class4

  1. 先提取Class1、Class2、Class3和Class5:
Class1 <- str_extract(a, "(?<=Class1:).*?(?=\\nClass2:)")
Class2 <- str_extract(a, "(?<=Class2:).*?(?=\\nClass3:)")
Class3 <- str_extract(a, "(?<=Class3:).*?(?=\\nClass4:)")
Class5 <- str_extract(a, "(?<=Class5:).*")
  1. 提取Class4原始内容并替换换行:
Class4_raw <- str_extract(a, "(?<=Class4:).*?(?=\\nClass5:)")
Class4 <- str_replace_all(Class4_raw, "\\n", ",")

验证结果

运行代码后得到的结果与预期完全一致:

> Class1
[1] "AAA_123_视物。"
> Class2
[1] "BBB_456,行手术。"
> Class3
[1] "CCC_789"
> Class4
[1] "DDD_111,EEE_222,FFF_333"
> Class5
[1] "GGG_444_右:光感?  "

原方法失败原因

  • 用ex_between(a, 'Class4:', '\n')只能提取到DDD_111,因为第一个换行就终止了匹配,但Class4的内容跨了多个换行,直到Class5才结束。
  • Class5的匹配用ex_between(a, 'Class1:', ' ')完全错误,起始标识选成了Class1,逻辑完全不对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:40:16