首页 > 解决方案 > 提取由模式分隔的时间码和后面的行中的文本

问题描述

我想从设置的字幕文件中提取开始时间和结束时间以及字幕文本。有什么更好的方法来做到这一点?字幕文件如下:

1
00:00:14,680 --> 00:00:23,960
on

2
00:00:24,480 --> 00:00:30,000
VERT

3
00:00:30,080 --> 00:00:38,120
UD

4
00:00:38,120 --> 00:00:39,040
REST

我想要以下内容:

00:00:14.680 , 00:00:23.960, on
00:00:24.480 , 00:00:30.000, VERT
00:00:30.080 , 00:00:38.120, UD
00:00:38.120 , 00:00:39.040, REST

在谷歌搜索之后,我可以使用以下内容提取在线正则表达式,如图所示。如何将提取的文本放入文件中(并,.?

(\d.{11})\s-->\s(\d.{11})[\r\n](\w+)

在此处输入图像描述

更新: 得到了我想要的以下内容。有什么办法可以用 . 替换 ,\ 吗?

gawk 'match($0, /([0-9].{11})\s-->\s([0-9].{11})/, a) {getline; print a[1], "\t", a[2],"\t", $0}' 

标签: regex

解决方案


这适用于 grep 和 perl:

$ cat text.txt | egrep -v '^[0-9]*$'| perl -pe 's/(:\d{2}),(\d)/$1.$2/g; s/ *--> */, /; s/(\d)\n/$1, /g;'
00:00:14.680, 00:00:23.960, on
00:00:24.480, 00:00:30.000, VERT
00:00:30.080, 00:00:38.120, UD
00:00:38.120, 00:00:39.040, REST
  • egrep删除空行和仅数字行
  • 多次perl搜索和替换将逗号固定为点,将-->箭头固定为逗号,并用逗号连接拖线

推荐阅读