字幕的正则表达式

regex for subtitles

我需要解析一些 srt 文件,我正在寻找与时间部分匹配的正则表达式(对于 JAVA)。我想要的是逐行读取文件,如果行是数字或时间部分,则跳过它们。

示例,给定:

1
00:00:01,357 --> 00:00:03,323
You took this case
without running it by me.

2
00:00:03,359 --> 00:00:04,825
- Jessica--
- That's enough. Dump it.

我要匹配行

00:00:03,359 --> 00:00:04,825

2

提前致谢!

匹配数:

^\d+$

比赛时间

^\d{2}:\d{2}:\d{2},\d{3}.*\d{2}:\d{2}:\d{2},\d{3}$

对于这两种情况

(^\d+$)|(^\d{2}:\d{2}:\d{2},\d{3}.*\d{2}:\d{2}:\d{2},\d{3}$)

正如我在你的格式中看到的那样,数字在时间之前所以你只需要使用匹配时间来获取行索引并重新移动 index-1 和 index


更清楚正则时间

^\d{2}:\d{2}:\d{2},\d{3}.*\d{2}:\d{2}:\d{2},\d{3}$

开始

^

从正文开始

\d{2} or [0-9]{2}

只有两位数

: or :{1} or [:]{1}

一个逗号:只有 ...

, or ,{1} or [,]{1}

一个逗号,只有

\d{3} or [0-9]{3}

只有三位数

.*

任何东西,有没有价值都可以

过去:再次检查时间格式

$

文末

这意味着该文本的从头到尾必须符合该条件

第一行 00:00:03,359 --> 00:00:04,82500:00:01,357 --> 00:00:03,323 下面的代码可能有用。

String strLine = "00:00:01,357 --> 00:00:03,323";
System.out.println(strLine.matches("\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d"));

您可以这样做来获取每个字幕的结束时间:

\d{2}:\d{2}:\d{2},\d{3}$

Regex live here.

解释:

\d{2}:      # a two-digits number followed by a ":" character
\d{2}:      # ""
\d{2},      # a two-digits number followed by a "," character
\d{3}       # a three-digits number
$           # matching only at ending lines