在Java中使用Regex无法匹配Srt字幕

时间:2013-08-31 05:04:18

标签: java regex

尝试在此代码中解析srt字幕:

public class MatchArray {

public static void main(String args[]) {

    File file = new File(
            "C:/Users/Thiago/workspace/SubRegex/src/Dirty Harry VOST - Clint Eastwood.srt");
    {

        try {
            Scanner in = new Scanner(file);

            try {
                String contents = in.nextLine();

                while (in.hasNextLine()) {
                    contents = contents + "\n" + in.nextLine();
                }



                String pattern = "([\\d]+)\r([\\d]{2}:[\\d]{2}:[\\d]{2}),([\\d]{3})[\\s]*-->[\\s]*([\\d]{2}:[\\d]{2}:[\\d]{2}),([\\d]{3})\r(([^|\r]+(\r|$))+)";


                Pattern r = Pattern.compile(pattern);

                // Now create matcher object.
                Matcher m = r.matcher(contents);

                ArrayList<String> start = new ArrayList<String>();
                while (m.find()) {
                    start.add(m.group(1));
                    start.add(m.group(2));
                    start.add(m.group(3));
                    start.add(m.group(4));
                    start.add(m.group(5));
                    start.add(m.group(6));
                    start.add(m.group(7));


                    System.out.println(start);

                }
            }

            finally {
                in.close();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

但是当我执行它时,它试图捕获任何组,当试图只捕获这种模式的时间时:

([\\d]{2}:[\\d]{2}:[\\d]{2}),([\\d]{3})[\\s]*-->[\\s]*([\\d]{2}:[\\d]{2}:[\\d]{2}),([\\d]{3})

有效。那么如何让它捕获整个字幕呢?

1 个答案:

答案 0 :(得分:0)

我不太了解你的需要,但我认为这可以提供帮助。 请试试正则表达式:

(\\d+?)\\s*(\\d+?:\\d+?:\\d+?,\\d+?)\\s+-->\\s+(\\d+?:\\d+?:\\d+?,\\d+?)\\s+(.+)

我在http://www.myregextester.com/index.php上尝试了它并且有效。

我希望这可以提供帮助。