求助:用perl修改字幕文件的时间行

wangdan1600 2009-05-15 10:25:48
朋友传来几个字幕文件要我修改下,其形式如下:
--------------------------------------------
2 00:00:25:23 00:00:32:05
按劇情需要,某些細節經過修改
3 00:00:32:10 00:00:38:16
故事的真實性已經過仔細調查
4 00:00:38:21 00:00:43:19
以下是故事的真實再現
5 00:01:25:10 00:01:31:12
根據我們富拉尼人的習俗
作為家裡最小的孩子
6 00:01:31:15 00:01:37:00
我每天要第一個起床做家務
7 00:01:37:02 00:01:42:18
---------------------------------------------
主要是修改时间行,将形如
2 00:00:25:23 00:00:32:05
的行改成
2 00:00:25.230 --> 00:00:32.050

我不知道如何对文件中的这些行进行操作,所以想烦请大家给个处理文件的版本。



$time='2 00:00:25:23 00:00:32:05'
$time=~s/([^:]+:[^:]+:[^:]+):(\d+) ([^:]+:[^:]+:[^:]+):(\d+)/\1.\2\x30\x20 --> \3.\4\x30/x;
print $time;
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shijiang1130 2009-06-04
  • 打赏
  • 举报
回复
格式固定的还可以用unpack
fibbery 2009-06-04
  • 打赏
  • 举报
回复
既然你能找到时间行,那么根本就不需要正则来处理,你可以拆分再重组:
$tmline='2 00:00:25:23 00:00:32:05';
my ($id,$start,$stop)=split(/\s/,$tmline,3);
$tmline="$id $start -> $stop";


找到时间行我认为只匹配头几个字母就行了。
if($tmline=~/^\d+\s\d\d/)
{
#处理
}


我没测试,几本思路就是这样。
hjjdebug 2009-06-04
  • 打赏
  • 举报
回复
用awk 即可, 参考下例。
[code=BatchFile]
$ cat 1.txt
2 00:00:25:23 00:00:32:05

$ cat 1.txt | awk '{print $1 " " $2 "0 ->" $3 "0"}'
2 00:00:25:230 ->00:00:32:050
[/code]
hyyuanqiang 2009-05-30
  • 打赏
  • 举报
回复
不需要正则式

杀鸡用牛刀啊

直接切片拷贝 就可以了
ThirstyCrow 2009-05-16
  • 打赏
  • 举报
回复
#!perl

while(<>) {
s{ :(\d{2}) (\s+ \d) }{.${1}0 --> \2}xms;
print $_;
}

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧