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

使用正则表达式为仅第二行有连字符的首行补全缺失连字符

字幕连字符补全的正则解决方案

需求明确:处理SRT字幕时,当同一段对话里只有第二行开头带连字符,要给第一行补上缺失的连字符。

原始字幕内容

167
00:06:59,794 --> 00:07:01,379
Well, I would like to see
your face as soon as possible.

168
00:07:01,421 --> 00:07:03,048
Really?
- If that's possible, yeah.

169
00:07:03,089 --> 00:07:04,007
- Really?
- Mm-hmm.

170
00:07:04,049 --> 00:07:05,550
I wanna see your face.
- Okay.

171
00:07:05,592 --> 00:07:07,427
Let's just order so we can get
the business out of the way,

之前尝试的正则(存在匹配范围过大问题)

查找:

([A-Z][\S\s]+)(?=^-\B)

替换:

- $1\r\n- 

这个正则的问题在于[\S\s]+会匹配任意字符(包括换行),导致匹配范围不受控,容易误改其他不需要处理的内容。

期望修正后的结果

167
00:06:59,794 --> 00:07:01,379
Well, I would like to see
your face as soon as possible.

168
00:07:01,421 --> 00:07:03,048
- Really?
- If that's possible, yeah.

169
00:07:03,089 --> 00:07:04,007
- Really?
- Mm-hmm.

170
00:07:04,049 --> 00:07:05,550
- I wanna see your face.
- Okay.

171
00:07:05,592 --> 00:07:07,427
Let's just order so we can get
the business out of the way,

正确的正则表达式方案

需要开启多行模式(Multiline),这样^和$才能匹配每行的开头和结尾:

查找正则:

^(?!-)(.*)$\r?\n^-(.*)$

替换内容:

- $1\r\n- $2

逻辑说明

  1. ^(?!-)(.*)$:匹配不以连字符开头的整行内容,(?!-)是负向前瞻,确保行首不是-,(.*)捕获这行的所有内容到分组1。
  2. \r?\n:匹配Windows或Unix风格的换行符,兼容不同系统的字幕格式。
  3. ^-(.*)$:匹配以连字符开头的整行内容,(.*)捕获连字符后面的内容到分组2。
  4. 替换时,给第一行内容前加上- ,第二行保留原有的- 并拼接捕获的内容,精准只修正符合条件的对话行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:15