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

使用R解析带角色名的修改版srt字幕生成data.frame

自定义带角色名SRT解析方案(R实现)

核心逻辑依托自定义SRT的固定结构特征做正则匹配,无需逐行遍历,可兼容字幕文本内部带换行、角色名带空格的场景,最终直接输出目标结构的data.frame。

实现步骤

  • 统一换行符格式,兼容Windows系统生成的\r\n换行
  • 用正则一次性匹配每条字幕的完整块,分别捕获角色名、对应台词文本
  • 清洗提取到的内容,组装为结构化表格

可直接运行的代码

# srt_raw 为通过readtext读入得到的带换行符的整段SRT字符串
# 统一换行符格式
srt_clean <- gsub("\r\n", "\n", srt_raw)

# 正则匹配所有字幕块,正则规则说明:
# 1. 匹配每条字幕开头的「序号+空格+角色名」行,捕获角色名
# 2. 跳过下一行固定格式的时间戳行(匹配HH:MM:SS,mmm --> HH:MM:SS,mmm结构)
# 3. 非贪婪匹配后续的台词文本,直到遇到下一条字幕的起始标记或字符串末尾
match_result <- gregexpr(
  pattern = "^(\\d+)\\s+([^\\n]+)\\n\\d{2}:\\d{2}:\\d{2}[,.]\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2}[,.]\\d{3}\\n(.*?)(?=\\n*\\d+\\s+[^\\n]+\\n\\d{2}:|$)",
  text = srt_clean,
  perl = TRUE
)

# 提取捕获内容
all_blocks <- regmatches(srt_clean, match_result)[[1]]
# 提取角色名
character_col <- gsub("^\\d+\\s+([^\\n]+)\\n.*", "\\1", all_blocks, perl = TRUE)
# 提取台词文本
text_col <- gsub("^.*?\\d{2}:\\d{2}:\\d{2}[,.]\\d{3}.*?\\n(.*)$", "\\1", all_blocks, perl = TRUE)

# 文本清洗:按需选择是否保留文本内部换行
# 以下代码会把文本内部换行替换为空格,需要保留换行则注释此行
text_col <- gsub("\\s*\n\\s*", " ", text_col)
# 清除首尾多余空白
text_col <- trimws(text_col)

# 组装为目标data.frame
srt_df <- data.frame(
  CHARACTER = character_col,
  TEXT = text_col,
  stringsAsFactors = FALSE
)

兼容说明

  • 已兼容角色名带空格的场景(如角色名John Smith可正常提取)
  • 已兼容单条台词跨多行的场景
  • 已兼容时间戳毫秒分隔符为逗号、点两种常见格式
  • 用你给出的示例字符串运行后,输出结果完全匹配需求结构:
    CHARACTER                        TEXT
    1      Matt      This is said by Matt.
    2     Lucas While this is said by Lucas
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:03:36