如何提取重复的字符串部分?

时间:2018-05-29 02:34:46

标签: java regex

我正在尝试使用Java正则表达式提取字符串的重复部分。

我的字符串是:s01e04:11:08

正则表达式是:^s(\\d+)e(\\d+)(:\\d+)*$

正则表达式匹配,但当我尝试提取第三组时,它只返回它的最后一部分。

预期::11:08

得到::08

完整代码是:

public static void main( String args[] ) {
        String marker = "s01e04:11:08";
        Pattern r = Pattern.compile("^s(\\d+)e(\\d+)(:\\d+)*$");
        Matcher matcher = r.matcher(marker);

        if (matcher.find()) {
            System.out.println(matcher.group(3));
        }
    }
}

2 个答案:

答案 0 :(得分:3)

在重复周围添加一个捕获组:

^s(\\d+)e(\\d+)((:\\d+)*)$
               ^        ^

如果你不需要自己解决这个问题,你也可以让重复的组不被捕获:

^s(\\d+)e(\\d+)((?::\\d+)*)$
                 ^^

答案 1 :(得分:1)

您的模式与1st":"。

不匹配

尝试使用此功能。

("^s(\\d+)e(\\d+)((:\\d+)+)$")

(:\\d+)+匹配:dd一次或多次。