实际的SRT解析是通过Java能够操作的正则表达式执行的.
实际的正则表达式是:
protected static final String nl = "\\\n";
protected static final String sp = "[ \\t]*";
Pattern.compile("(?s)(\\d+)" + sp + nl + "(\\d{1,2}):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp + "-->"+ sp + "(\\d\\d):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp + "(X1:\\d.*?)??" + nl + "(.*?)" + nl + nl);
Run Code Online (Sandbox Code Playgroud)
组2,3,4和5是开始时间组6,7,8和9是完成时间组11是字幕文本
我已经生成了一个用于解析和读取不同字幕格式的java逻辑,其中有一些是流行的srt:你可以在我的GiT存储库中找到MIT开源许可证(可以随意使用)许可的代码:
https://github.com/JDaren/subtitleConverter
您可能只需要基本类和SRTFormat类,然后您可以从InputStream读取srt文件或在完成编辑后获取完整的String []文件.
如果您确实发现这个有用,或者我可以帮助您,请与我联系.
PS :(其他支持的格式,部分或全部是.ASS .SSA .STL .SCC和.XML(来自W3C的TTAF-DFXP,也称为TTML 1.0)
编辑:
你可以在www.subtitleconverter.net找到工作中的逻辑
实际上修改后的正则表达式@Panayotis支持多行字幕文本是这样的:
protected static final String nl = "\\n";
protected static final String sp = "[ \\t]*";
Pattern.compile(
"(\\d+)" + sp + nl
+ "(\\d{1,2}):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp
+ "-->" + sp + "(\\d\\d):(\\d\\d):(\\d\\d),(\\d\\d\\d)" + sp
+ "(X1:\\d.*?)??" + nl + "([^\\|]*?)" + nl + nl);
Run Code Online (Sandbox Code Playgroud)
替换([^\\|]*?)为字幕文本可能性较小的任何字符.我目前使用"|" 性格否定规则.
| 归档时间: |
|
| 查看次数: |
12209 次 |
| 最近记录: |