标记百分比的正则表达式

时间:2015-05-06 09:04:01

标签: java regex

我正在尝试创建一个匹配标记百分比的正则表达式

例如,如果我们考虑几个百分比

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

匹配的百分比应为

100%
56.78%
34.6789%

我已经制作了一个表达式"\\d.+[\\d]%",但它也匹配了我不想要的56 78.90%

如果有人知道这样的表达,请分享

4 个答案:

答案 0 :(得分:12)

\\d+(?:\\.\\d+)?%

这应该为你做。

对于更严格的测试用途,

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

参见演示。

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

答案 1 :(得分:4)

你没有双重逃过你的点,这意味着它是任何角色的通配符,包括空格。

使用类似:

 ┌ 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+)?%"

例如:

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

<强>输出

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

注意

这仍然匹配第三个输入,但只匹配最后一个部分。

如果您希望第3个输入不匹配,可以使用输入边界包围模式,例如^表示输入开始,$表示输入结束。

那将成为:"^\\d+(\\.\\d+)?%$"

或者,您只需调用Matcher#matches而不是Matcher#find

下一步

您可能希望使用您要检索的数值来执行某事

在这种情况下,您可以使用组("(\\d+(\\.\\d+)?)%")包围您的模式,并在您的反向引用上调用Double.parseDoublenew BigDecimal(...)

  • Double.parseDouble(m.group(1))
  • new BigDecimal(m.group(1))

答案 2 :(得分:0)

RegEx \\d+(\\.?\\d+)?%可行。

答案 3 :(得分:0)

<强> ^((100)|(\ d {1,2}(\ d *))。?)%$

在此处查看此正则表达式:https://regex101.com/r/Ou3mJI/2

您可以使用此正则表达式。它适用于:

  1. 0到100(含)
  2. 有无小数位
  3. 以下是有效值:

    100%有效
    99.802%有效
    98.7%有效
    57%有效
    0%有效

    此正则表达式使以下值无效:

    1. 负数
    2. 数字&gt; 100
    3. 带空格的数字
    4. 无效的值示例:

      -1%
      99.989%
      101%
      56 78.90%

      希望这会有所帮助!