使用正则表达式修改srt文件?

时间:2012-01-30 21:30:17

标签: regex

一种格式的srt文件如下所示:

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

,另一种格式如下

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

我想处理第一种文件,为了兼容性目的,在每个时间帧上附加一个000,以便第一个文件具有我需要的000格式,就像上面的第二个例子一样。

我正在考虑尝试使用某些字符串函数,例如mid()right()instring(),但是想知道正则表达式是否可以更好地完成工作,有关如何执行此操作的任何建议吗?< / p>

4 个答案:

答案 0 :(得分: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
?>

答案 1 :(得分: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

它将在现场完成。

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

答案 2 :(得分:0)

当然,这听起来不错。一个简单的方法是匹配(\d?\d:\d\d:\d\d)并将其替换为匹配本身加,000(对于“匹配本身”使用back reference,这可能类似\1 }或$1,具体取决于您的语言。)

尝试实施此功能,如果您需要进一步的帮助,请提出一个新问题,其中提及您尝试过的内容,您遇到的问题以及您使用的语言。

答案 3 :(得分:0)

为什么不简单

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

前提是old.srt始终只包含较短的格式。