Pan*_*tis 7

实际的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是字幕文本

  • 谢谢!你能解释一下这是什么:"(X1:\\ d.*?)??" 对于? (3认同)
  • 还有一个错误-“ \\ n”而不是“ \\\ n”。最好将其替换为“ \\ r?\\ n”(在Windows和Unix上均可使用),如[此处](http://stackoverflow.com/questions/454908/split-java-string)所述-按新行) (2认同)

Dar*_*ren 6

我已经生成了一个用于解析和读取不同字幕格式的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找到工作中的逻辑


pri*_*ava 6

实际上修改后的正则表达式@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)

替换([^\\|]*?)为字幕文本可能性较小的任何字符.我目前使用"|" 性格否定规则.