Java 接受任何字母、任何语言、符号或数字汇编的正则表达式
我正在开发一个正则表达式,它可以从任何语言的字幕文件中提取文本,有时还包含Unicode字符Java 接受任何字母、任何语言、符号或数字汇编的正则表达式,java,regex,subtitle,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 "
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.400:00:44410
这是一种更新正则表达式以匹配文本槽中的数字,但不是字幕计时数字的一部分的方法。您的字符类中有一个错误:
*
和之间的-
,
表示一个范围,而不是字符-
。您可以将其转义或放在角色类的开头/结尾
修复此问题并添加\p{N}
将为我们提供[\p{p}\p{L}\p{p}*,;“\s\p{N}-]+
,这几乎是完美的,但失败了,因为它不包含
[\p{p}\p{L}\p{p}*,;“\s\p{N}>-]+
将是完美的,请参见.srt
非常简单,您不应该编写一个大的、可能损坏的RegExp来解析它
从Java8开始,您可以使用来匹配任何换行符
因此,使用“\\R\\R”
分割.srt
文件以获得字幕块
对于每个字幕块,将其拆分为最多3个元素的“\\R”
。
您将获得一个字符串[]
:
- 身份证
- t1-->t2
- 任何语言的文本,可能包含换行符和数字
是的,应该足够了。你测试过了吗?是的,但不太可能,我会用results@ThomasAyoub在添加了
\\p{N}
之后,我用状态更新了这个问题,它得到了数字,但对于整个文本,如何使每个插槽的文本只起作用?只想获取文本:“正如你所看到的,他不再是1岁了,他现在12岁了。”顺便说一句,我有计时正则表达式只需要有效的文本部分抱歉仍然获取整个文本,抱歉我不得不提前提到正则表达式应用于包含所有字幕文件的字符串content@YouYou请用相关信息编辑您的问题:)非常好而且快速,非常感谢这比复杂的正则表达式要好得多
=> [["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."]]