0

我看过其他问题,但他们没有让我得到答案。

我有这个代码:

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

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

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

4

4 回答 4

1

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

我会:

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

于 2012-12-03T15:51:34.570 回答
1

试试这个:

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

在您的原始模式中,您指定第二个数字应该只包含一个数字,所以我\d+尽可能多地匹配。我也{1}从第一个数字定义中删除了,因为它没有为正则表达式增加价值。

于 2012-12-03T15:54:42.777 回答
1

在您的正则表达式中,您错过了第二个数字所需的量词\\d。这个量词是+or {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
    }
于 2012-12-03T15:56:14.650 回答
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);
        }
    }
于 2012-12-03T16:00:25.533 回答