正则表达式,接受任何语言,符号或数字的任何字母汇编

时间:2016-12-04 10:52:32

标签: java regex subtitle

我正在开发一个可以从字幕文件中获取文本的正则表达式,该文本可能是任何语言,有时包含Unicode字符

String str=
   "1
    00:00:25,690 --> 00:00:44,410
    As you can see he is no longer 1 year old, he is 12 years old now.

    2
    00:00:44,410 --> 00:00:58,120
    He helps with the baby girl
";

使用ragex获取每个插槽:

((^1\n|(\\n\\d+\n))(\\d{2}:\\d{2}:\\d{2},\\d{3}.*\\d{2}:\\d{2}:\\d{2},\\d{3}))[\\p{P}\\p{L}\\p{P}*-,;'\"\\s]+

但最近发现字幕文本插槽可以包含数字,以便如何涵盖任何字符的任何语言的任何可能性,任何Unicode字符和中间的任何数字。

尝试添加\p{N}

但失败了。它现在包括时间和字幕顺序: 有时像:blah blah blah.400:00:44,410

这是一种更新正则表达式以匹配文本插槽中找到的数字的方法,但不是字幕时序数字的一部分。

1 个答案:

答案 0 :(得分:2)

.srt specification非常简单,你不应该写一个很大的,可能是破坏的RegExp来解析它。

从Java 8开始,您可以使用\R来匹配任何换行符。

因此,将.srt文件与"\\R\\R"分开以获取字幕块。

对于每个字幕块,将"\\R"拆分为最多3个元素。 你得到一个String[]

  • ID
  • t1 - > T2
  • 任何语言的文字,可能都有新行和数字。

完成!

=> [["1", "00:00:23,480 --> 00:00:27,920", "AM RANDE DER NACHT"],
 ["2", "00:02:22,570 --> 00:02:24,060", "- Salü.\r\n- Monsieur."],
 ["3", "00:02:25,300 --> 00:02:26,890", "- Panne?\r\n- Hm."],
 ["4", "00:02:29,840 --> 00:02:31,830", "Und wieviel brauchst du?"],
 ["5", "00:02:32,340 --> 00:02:34,000", "Von was, Monsieur?"],
 ["6", "00:02:34,120 --> 00:02:35,140", "Na ja, Sprit."],
 ["7", "00:02:36,210 --> 00:02:38,230", "Es äh... es liegt nicht am Sprit."],
 ["8", "00:02:38,490 --> 00:02:40,710", "Es ist, glaub ich, die Kerze."],
 ["9", "00:02:42,220 --> 00:02:43,980", "Was für 'ne Kerze brauchst du?"],
 ["10", "00:02:45,390 --> 00:02:47,800", "Äh, 'ne Kerze eben. Für 'n Moped."]]