正则表达式模式 - 仅在用连字符分隔时提取字符串

时间:2012-12-03 15:49:57

标签: java regex

我看过其他问题,但他们没有引导我回答。

我有这段代码:

Pattern p = Pattern.compile("exp_(\\d{1}-\\d)-(\\d+)");

我想要匹配的字符串是:exp_5-22-718

我想提取5-22718。我不太清楚为什么它不起作用我错过了什么?非常感谢

4 个答案:

答案 0 :(得分:1)

如果字符串总是以exp_为前缀,我就不会使用正则表达式。

我会:

注意:此答案基于假设。如果你有多个连字符,我会提供更强大的功能。但是,如果您需要验证数字的格式,那么正则表达式可能会更好。

答案 1 :(得分:1)

试试这个:

Pattern p = Pattern.compile("exp_(\\d-\\d+)-(\\d+)");

在您的原始模式中,您指定第二个数字应该只包含一个数字,因此我将\d+匹配为尽可能多的数字。 我还从第一个数字定义中删除了{1},因为它没有为regexp增加值。

答案 2 :(得分:1)

在你的正则表达式中,你错过了第二位\\d所需的量词。此量词为+{2}

    String yourString = "exp_5-22-718";

    Matcher matcher = Pattern.compile("exp_(\\d-\\d+)-(\\d+)").matcher(yourString);
    if (matcher.find()) {
        System.out.println(matcher.group(1)); //prints 5-22
        System.out.println(matcher.group(2)); //prints 718
    }

答案 3 :(得分:1)

您可以使用string.split方法执行此操作。请检查以下代码。 我假设你的字符串以“exp _”开头。

    String str = "exp_5-22-718";
    if (str.contains("-")){
        String newStr = str.substring(4, str.length());
        String[] strings = newStr.split("-");

        for (String string : strings) {
            System.out.println(string);
        }
    }