2

我需要解析一些 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

提前致谢!

4

3 回答 3

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 和索引删除


更清楚正则表达式时间

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

开始

^

从正文开始

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

只有两位数

: 或 :{1} 或 [:]{1}

一个逗号:只有...

, 或 ,{1} 或 [,]{1}

一个逗号,只有一个

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

仅限三位数

.*

每一件事,有没有价值都可以

过去:再次检查时间格式

$

文本结束

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

于 2015-07-16T12:11:59.823 回答
0

对于第一行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"));
于 2015-07-16T12:12:26.800 回答
0

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

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

正则表达式住在这里。

解释:

\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 
于 2015-07-16T12:21:01.323 回答