【问题标题】:regex insert character into blank SRT正则表达式将字符插入空白 SRT
【发布时间】:2021-05-05 19:56:35
【问题描述】:

我有一个与视频关联的空白 SRT 文件,时间码已在转录软件平台中设置(即每个字幕的边界已设置但字幕尚未写下),我已上传视频到 youtube,现在我想将空白 SRT 文件复制到它,以便有人可以使用 YouTube 的转录/翻译平台转录它。

空白 SRT:

1
00:00:01,05 --> 00:00:04,64


2
00:00:05,02 --> 00:00:07,18


3
00:00:07,81 --> 00:00:11,03


4
00:00:11,04 --> 00:00:15,92


5
00:00:16,35 --> 00:00:17,11

但是有一个问题,由于字幕中没有文字,youtube 无法识别时间码,因此当 srt 上传到 youtube 中的视频时没有任何反应。

为了解决这个问题,我在每个时间码下方的空白行中放置了一个非字母数字字符(通常是“-”)。

带有破折号的 SRT 文件:

1
00:00:01,05 --> 00:00:04,64
-

2
00:00:05,02 --> 00:00:07,18
-

3
00:00:07,81 --> 00:00:11,03
-

4
00:00:11,04 --> 00:00:15,92
-

5
00:00:16,35 --> 00:00:17,11
-

这是一个非常手动的过程,可能需要很长时间。必须有一种方法可以在 Notepad++ 之类的东西中使用查找和替换,然后简单地添加破折号。我正在尝试使用正则表达式来做到这一点,但遇到了问题。

^$ 正确定位空白行,但是如果我只是用“-”替换它们,我会得到:

1
00:00:01,05 --> 00:00:04,64
-
-
2
00:00:05,02 --> 00:00:07,18
-
-

这是不可接受的,因为它破坏了 SRT 的语法,当将这样的 SRT 上传到 youtube 时,它​​认为内容是单个标题。因此,我只需要在第一个空行中放置一个破折号,即时间码正下方的空行。

我不知道如何只选择每对空行中的第一个空行。任何解决方案将不胜感激。

【问题讨论】:

    标签: regex notepad++ srt


    【解决方案1】:

    您可以在行尾匹配特定格式,后跟换行符并直接断言字符串的末尾,然后替换为完整匹配和-

    找到什么

    -->\h+\d\d:\d\d:\d\d,\d+\R$
    

    替换为

    $0-
    

    Regex demo

    或仅匹配逗号、数字和换行符后跟锚点的短变体:

    ,\d+\R$
    

    【讨论】:

    • 成功了!为什么不简单地 ,\d+\R 来捕获时间码的结尾?我也试过了,它似乎有效,只是好奇是否有我遗漏的东西
    • @Wangana 如果这是字符串中出现的唯一格式,您也可以这样做。我只是使模式非常具体,以防止误报。最后的$是为了保证下一行是空的。
    猜你喜欢
    • 2010-09-14
    • 2018-05-03
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2013-07-26
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多