有正则高手在不,麻烦看看我这个问题如何解决。

ipenglei 发布于 2014/08/03 19:47
阅读 1K+
收藏 1

现在的情况是这样的。

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

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

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

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

而最终需要变成这样:

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

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

有高手来帮帮忙不? ^^

加载中
0
袁国涛
袁国涛
如果是我,我就这么干。1.合并所有行到一行,ctrl+j。2.时间前(这里用到正则,不过不难)插入换行 3.复制到excel里,前面空一列给行号,然后向下一拉,嘿嘿 4.复制出来到文本编辑器再做换行处理,时间后插入回车换行。据我所知,通用正则没有计数器,要自动化必须写代码。
ipenglei
ipenglei
还是各种工具混搭实用啊~ 谢了哈 ^o^
0
ipenglei
ipenglei

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

([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 来找高手了。。。

0
ipenglei
ipenglei

看看测试效果:

还不错。。。问题是这个数字1 我是要会自动累加的。。。啊 啊 啊 ~ ~ ~

0
ipenglei
ipenglei

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

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

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



0
ipenglei
ipenglei
按道理正则引擎里是应该有这个计数器的,就是不知道怎么引用出来。。。
0
gaubee
gaubee
sublime text的多行编辑分分钟解决。但正则我也无力帮忙
0
realanan
realanan
你把文件发上来我们帮你转
ipenglei
ipenglei
这个好,我晚点发你 哈哈~
0
云香水识
云香水识
如果用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});



返回顶部
顶部