Creating regex to extract 4 digit number from stri

2019-02-26 01:12发布

问题:

Hi I am trying to build one regex to extract 4 digit number from given string using java. I tried it in following ways:

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);
    }

But it's not working properly. How to do this. Need some help. Thank you.

回答1:

Change you pattern to:

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

\d is for a digit and the number in {} is the number of digits you want to have.



回答2:

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

This should do it for you.^$ will compare with the whole string.It will match string with only numbers.



回答3:

Remove the anchors.. put paranthesis if you want them in group 1:

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

And extract out matcher.group(1)



回答4:

If you want to end up with 0025,

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


回答5:

Many better answers, but if you still have to use in the same way.

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);
    }

changed matcher.group(1); to matcher.group(0);



回答6:

You can go with \d{4} or [0-9]{4} but note that by specifying the ^ at the beginning of regex and $ at the end you're limiting yourself to strings that contain only 4 digits.

My recomendation: Learn some regex basics.



回答7:

If you want to match any number of digits then use pattern like the following:

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

And for exactly 4 digits go for

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