一种格式的srt文件如下所示:
0:00:04 --> 00:00:10
,另一种格式如下
0:00:04,000 --> 00:00:10,000
我想处理第一种文件,为了兼容性目的,在每个时间帧上附加一个000,以便第一个文件具有我需要的000格式,就像上面的第二个例子一样。
我正在考虑尝试使用某些字符串函数,例如mid()
,right()
,instring()
,但是想知道正则表达式是否可以更好地完成工作,有关如何执行此操作的任何建议吗?< / p>
答案 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
始终只包含较短的格式。