2012-01-30 61 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始終只包含短格式。