Regular Expression for Percentage of marks

前端 未结 4 1798
一向
一向 2021-01-17 17:04

I am trying to create a regex that matches percentage for marks

For example if we consider few percentages

1)100%
2)56.78%
3)56 78.90%
4)34.6789%


        
相关标签:
4条回答
  • 2021-01-17 17:50

    The RegEx \\d+(\\.?\\d+)?% would work.

    0 讨论(0)
  • 2021-01-17 17:52

    You haven't double-escaped your dot, which means it's a wildcard for any character, including whitespace.

    Use something like:

     ┌ integer part - any 1+ number of digits
     |   ┌ dot and decimal part (grouped)
     |   |┌ double-escaped dot
     |   ||  ┌ decimal part = any 1+ number of digits
     |   ||  |    ┌ 0 or 1 greedy quantifier for whole group
     |   ||  |    |
    "\\d+(\\.\\d+)?%"
    

    For instance:

    String[] inputs = { "100%", "56.78%", "56 78.90%", "34.6789%" };
    Matcher m = null;
    for (String s: inputs) {
        m = p.matcher(s);
        if (m.find())
            System.out.printf("Found: %s%n", m.group());
    }
    

    Output

    Found: 100%
    Found: 56.78%
    Found: 78.90%
    Found: 34.6789%
    

    Note

    This still matches the 3rd input, but only the last part.

    If you want the 3rd input to just not match, you can surround your pattern with input boundaries, such as ^ for start of input, and $ for end of input.

    That would become: "^\\d+(\\.\\d+)?%$"

    Or, you can simply invoke Matcher#matches instead of Matcher#find.

    Next step

    You may want to do something with the numerical value you're retrieving.

    In this case, you can surround your pattern with a group ("(\\d+(\\.\\d+)?)%") and invoke either Double.parseDouble or new BigDecimal(...) on your back-reference:

    • Double.parseDouble(m.group(1))
    • new BigDecimal(m.group(1))
    0 讨论(0)
  • 2021-01-17 17:56

    ^((100)|(\d{1,2}(.\d*)?))%$

    Check this regular expression here: https://regex101.com/r/Ou3mJI/2

    You can use this regular expression. It is valid for:

    1. 0 to 100 inclusive
    2. With and without decimal places

    Below are valid values:

    100% is valid
    99.802% is valid
    98.7% is valid
    57% is valid
    0% is valid

    This regular expression invalidates below values:

    1. Negative numbers
    2. Number > 100
    3. Number with spaces

    Invalid value examples:

    -1%
    99.989%
    101%
    56 78.90%

    Hope this will help!

    0 讨论(0)
  • 2021-01-17 17:59
    \\d+(?:\\.\\d+)?%
    

    This should do it for you.

    For more stringent test use,

    \b(?<!\.)(?!0+(?:\.0+)?%)(?:\d|[1-9]\d|100)(?:(?<!100)\.\d+)?%
    

    See demo.

    https://regex101.com/r/zsNIrG/2

    0 讨论(0)
提交回复
热议问题