11
回答
有正则高手在不,麻烦看看我这个问题如何解决。
华为云实践训练营,热门技术免费实践!>>>   

现在的情况是这样的。

1、我在微软Microsoft Virtual Academy网站上下载教学视频,视频下载下来后发现没有中文字幕,但是微软的网站上播放时候是有字幕的,通过查看网页源码我把字幕文件下载了下来。

2、ok现在我有.mp4视频文件和字幕文件.txt。问题来了,我用播放器播放视频的时候并不会自动加载字幕,手动加载字幕文件又提示无效字幕文件。

3、网站查找资料得知,微软网站上的字幕文件格式为WEBVTT格式,修改文件名为.vtt格式。打开视频文件仍然无法加载字幕。。。现在我只得把.vtt格式字幕转换为.srt字幕格式了。。。

问题来了。我通过notepad++的正则 已经把vtt字幕文件转换成下图这样

而最终需要变成这样:

用正则删除换行啥的我都知道怎么操作,现在的问题是 如何 在正则匹配到字符串后做替换操作的时候不但要自动计数还要把这个计数替换到被替换的字符串里去。

换个话说就是被替换的字符串里有一个字符是累加变动的。

有高手来帮帮忙不? ^^

<无标签>
举报
ipenglei
发帖于3年前 11回/982阅
共有11个答案 最后回答: 3年前
如果是我,我就这么干。1.合并所有行到一行,ctrl+j。2.时间前(这里用到正则,不过不难)插入换行 3.复制到excel里,前面空一列给行号,然后向下一拉,嘿嘿 4.复制出来到文本编辑器再做换行处理,时间后插入回车换行。据我所知,通用正则没有计数器,要自动化必须写代码。
--- 共有 1 条评论 ---
ipenglei还是各种工具混搭实用啊~ 谢了哈 ^o^ 3年前 回复

我现在的想法是通过下面这段正则找到字幕文件里的时间戳那行+最后结尾看不见的回车换行

([0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{3} --> [0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{3})\r\n

然后做替换的时候把匹配时候的计数添加到里面去,顺便删除掉时间戳后面看不见的回车+换行

计数\r\n\1

问题。。。这个计数怎么写来着。。。手头没书,又在外地出差。。。so 来找高手了。。。

。。。这尼玛是要我写脚本的节奏啊

哎~~~就没个高手来支招么?

--- 共有 2 条评论 ---
ipenglei回复 @dreamhack : 麻烦啊 我现在用的windows系统哎,再搞个虚拟机用shell多累。。。 3年前 回复
dreamhack那用shell呗,sed和awk都行,简单的话:cat | grep 3年前 回复
这个问题和“正则表达式”没关系,而是和“编辑器”相关。如果你把解决方案框死在notepad++这个工具的话,只能去找找看有没有相应的插件了;否则,可以看看我以前发的一篇没人看的帖子:http://www.oschina.net/question/58387_108493
--- 共有 3 条评论 ---
redraiment回复 @ipenglei : 那你可以试试Emacs 3年前 回复
ipenglei还是写个脚本吧。。。主要是需要转换的文件有好几个。 我就是不想限定死工具,所以才想用纯正则转换 达到 字幕格式的 转换。。。 3年前 回复
redraimentBTW,shell和emacs都有Windows版本,无需装虚拟机 3年前 回复
<?php

$text=<<<T

00.00.02.350
[音乐]
00.00.18.130
>> xx
00.00.19.440
>> oo 

T;

//echo $text;

$index=1;

echo preg_replace_callback("/(?:\d{2}\.){3}\d{3}/",function($x) use(&$index) {
    return $index++."\n".$x[0];
    
},$text);



如果用javascript的话: 
var t = 0;
str.replace(/[\n\b](\d\d:\d\d:\d\d\.\d\d\d\s-->\s\d\d:\d\d:\d\d\.\d\d\d)/g,function(match,m1){return (t++ ? '\n':'') +t+'\n'+m1});



顶部