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

简化字幕歌词匹配正则表达式需求(含HTML斜体块场景)

简化字幕歌词匹配的正则表达式方案

需求背景

我有一套从视频分离字幕的工作流,会移除听障相关及冗余内容,仅保留台词部分。但字幕中常混入歌曲歌词,这类歌词几乎均以♪包裹1-3行文本,目前在BBEdit中使用多OR分支的正则匹配移除,现需要简化正则:

  1. 匹配以♪开头结尾、中间含任意行数文本的内容
  2. 匹配被HTML <i>标签完整包裹的同格式歌词,替换现有多OR分支的方案

示例歌词格式

906
00:42:10,597 --> 00:42:12,530
♪ When I woke up
I opened my eyes♪

907

原有正则问题

原有普通文本正则通过多个OR分支覆盖1-3行的情况,写法冗余:

♪ .+
.+
.+ ♪|♪ .+
.+ ♪|♪ .+ ♪|♪ .+

原有HTML斜体块正则同样存在冗余问题:

&lt;i&gt;♪ .+
.+
.+ ♪&lt;/i&gt;|&lt;i&gt;♪ .+
.+ ♪&lt;/i&gt;|&lt;i&gt;♪ .+ ♪&lt;/i&gt;

简化后的正则方案

普通文本歌词匹配

使用非贪婪模式匹配任意内容(含换行),无需分分支覆盖行数:

♪[\s\S]*?♪
  • ♪:匹配开头的音符标记
  • [\s\S]*?:匹配任意字符(包括换行符),*?为非贪婪模式,确保只匹配到最近的结尾♪,避免跨多个歌词块匹配
  • ♪:匹配结尾的音符标记

HTML斜体包裹的歌词匹配

同理,在普通文本正则基础上加上<i>标签的匹配:

<i>♪[\s\S]*?♪</i>
  • <i>:匹配开头的斜体标签
  • 中间部分同普通文本正则,匹配完整歌词内容
  • </i>:匹配结尾的斜体标签

注:在BBEdit中使用时,默认正则引擎已支持多行匹配,该正则可覆盖1-3行甚至更多行的歌词场景,完全替代原有多OR分支的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:50:04