2012-01-30 84 views
0

一种格式是这样的:使用正则表达式来修改srt文件? SRT文件的

0:00:04 --> 00:00:10 

和其他格式看起来像这样

0:00:04,000 --> 00:00:10,000 

我要处理的第一类型的文件追加的,000到每个时间框架出于兼容的目的,以便第一个文件具有我需要的000格式,如上面的第二个示例。

我想使用一些字符串函数,如mid(),right()instring()但想知道是否正则表达式可以更好地完成这项工作,对如何做到这一点的任何建议?

+0

哪种语言或工具? AWK? SED? VIM? Java?..... – Kent 2012-01-30 21:36:20

+0

Brightscript,可能看起来像'r = CreateObject(“roRegex”,“a”,“i”) r.ReplaceAll(“Abracadabra”,“x”)' – alphablender 2012-01-30 21:50:52

回答

0

您可以使用此正则表达式匹配第一组:

^([0-9]{1,2}:[0-9]{2}:[0-9]{2}) --> ([0-9]{1,2}:[0-9]{2}:[0-9]{2})$ 

,然后替换在$ 1由$ 1 + “000" 和$ 2的$ 2 +”,000"

既然你不”牛逼表明您使用哪种语言,我没有在PHP一个简单的例子:

<?php 
$string = 'April 15, 2003'; 
$pattern = '/(\w+) (\d+), (\d+)/i'; 
$replacement = '${1}1,$3'; 
echo preg_replace("/^([0-9]{1,2}:[0-9]{2}:[0-9]{2}) --> ([0-9]{1,2}:[0-9]{2}:[0-9]{2})$/i", "$1,000 --> $2,000", "0:00:04 --> 00:00:10"); 
// output : 0:00:04,000 --> 00:00:10,000 
?> 
0

随着sed(这是适用于Windows太):

sed -i '/\d\+\:\d\+:\d\+ --> \d\+\:\d\+:\d\+/ s_\(\d\+\:\d\+:\d\+\)\s*-->\(\d\+\:\d\+:\d\+\)\s*_\1,000 --> \2,000_' INPUT.srt 

它将在原地完成。

我知道这不是正确的正则表达式来捕获时间定义...但它的工作原理这项工作。)

0

当然,这听起来像一个好主意。一个简单的方法是匹配(\d?\d:\d\d:\d\d),并用匹配本身加上,000替代它(对于“匹配本身”使用back reference,这可能类似于\1$1,这取决于您的语言)。

尝试执行此操作,如果您需要进一步的帮助,请在提到您尝试过的内容,您被卡住的位置以及您正在使用哪种语言的情况下开始一个新问题。

0

为什么不干脆

sed -e 's/ -->\|$/,000&/' old.srt >new.srt 

提供old.srt始终只包含短格式。