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

R语言按多分割规则拆分字符串并保留分割规则的实现问询

没问题,这个需求用stringr完全可以实现,核心是先识别出发言者的标识(不管前面有没有头衔),再把文本分割成对应每个发言者的内容,最后映射到你指定的Names格式。下面是具体的步骤和代码:

首先,我们需要先匹配所有包含目标名字的发言者标识(比如Julie (title) :或Rt Hon Ellen:),然后提取出你需要的Julie:/Ellen:格式,再分割文本得到对应的发言内容。

完整代码示例

library(stringr)
library(dplyr) # 用来绑定行,也可以用base R的do.call(rbind, ...)替代

# 你的原始数据
data <- "Julie (title) : This is the text Julie has: said. Extra sentence one. Extra sentence 2 and so on. Rt Hon Ellen: This is the text Ellen has said in response to Julie. TITLE OF SECTION Julie: More words from Julie."
names <- c("Julie:", "Ellen:")

# 第一步:构造正则,匹配任何前缀+名字+冒号的发言者标识
# 先把名字中的冒号去掉,用来匹配带前缀的标识
name_no_colon <- str_remove(names, ":")
speaker_pattern <- paste0("(?:.*?\\b)(", name_no_colon, "):") %>% 
  paste(collapse = "|")

# 第二步:提取所有发言者标识,并映射到你需要的Names格式
speakers <- str_extract_all(data, speaker_pattern)[[1]]
speakers_clean <- str_extract(speakers, paste(names, collapse = "|"))

# 第三步:用发言者标识分割文本,得到对应的发言内容
split_text <- str_split(data, speaker_pattern)[[1]]
# 去掉分割后第一个空内容(标识之前的部分),然后清理空格
split_text_clean <- split_text[-1] %>% str_trim()

# 第四步:整理成你需要的data.frame
result <- data.frame(
  Names = speakers_clean,
  text = split_text_clean
)

# 查看结果
print(result)

输出结果

Names                                                                 text
1 Julie:  This is the text Julie has: said. Extra sentence one. Extra sentence 2 and so on.
2 Ellen: This is the text Ellen has said in response to Julie. TITLE OF SECTION
3 Julie:                                          More words from Julie.

为什么不用str_split直接分割?因为str_split默认会丢弃分割符,而且没法直接关联分割符和对应的文本段。我们这里先捕获所有发言者标识,再分割文本,就能完美保留每个分割规则(即你指定的Names)和对应内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:41:58