创建正则表达式以使用java从字符串中提取4位数字

时间:2015-06-02 08:54:45

标签: java regex string substring

您好我正在尝试构建一个正则表达式,使用java从给定字符串中提取4位数字。我尝试了以下方式:

String mydata = "get the 0025 data from string";
    Pattern pattern = Pattern.compile("^[0-9]+$");
    //Pattern pattern = Pattern.compile("^[0-90-90-90-9]+$");
    //Pattern pattern = Pattern.compile("^[\\d]+$");
    //Pattern pattern = Pattern.compile("^[\\d\\d\\d\\d]+$");

    Matcher matcher = pattern.matcher(mydata);
    String val = "";
    if (matcher.find()) {
        System.out.println(matcher.group(1));

        val = matcher.group(1);
    }

但它不能正常工作。这该怎么做。需要一些帮助。谢谢。

7 个答案:

答案 0 :(得分:9)

将您的模式更改为:

Pattern pattern = Pattern.compile("(\\d{4})");

\d用于数字,{}中的数字是您想要的数字。

答案 1 :(得分:1)

Pattern pattern = Pattern.compile("\\b[0-9]+\\b");

这应该为你做。^$将与整个字符串进行比较。它将仅匹配numbers字符串。

答案 2 :(得分:0)

删除锚点..如果你想在group 1中放置paranthesis:

Pattern pattern = Pattern.compile("([0-9]+)");   //"[0-9]{4}" for 4 digit number

并提取matcher.group(1)

答案 3 :(得分:0)

如果您想以 0025 结束,

String mydata = "get the 0025 data from string";
mydata = mydata.replaceAll("\\D", ""); // Replace all non-digits

答案 4 :(得分:0)

许多更好的答案,但如果你仍然必须以同样的方式使用。

String mydata = "get the 0025 data from string";
Pattern pattern = Pattern.compile("(?<![-.])\\b[0-9]+\\b(?!\\.[0-9])");
Matcher matcher = pattern.matcher(mydata);
String val = "";
    if (matcher.find()) {
        System.out.println(matcher.group(0));

        val = matcher.group(0);
    }

matcher.group(1);更改为matcher.group(0);

答案 5 :(得分:0)

您可以使用\d{4}[0-9]{4},但请注意,通过在正则表达式的开头指定^并在结尾处指定$,您可以将自己限制为字符串包含 4位数。

我的推荐:学习一些正则表达式的基础知识。

答案 6 :(得分:-1)

如果您想匹配任意数量的数字,请使用如下模式:

^\D*(\d+)\D*$

正好4位数字

^\D*(\d{4})\D*$