标记百分比的正则表达式

Nis*_*123 6 java regex

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

例如,如果我们考虑很少的百分比

1)100%
2)56.78%
3)56 78.90%
4)34.6789%
Run Code Online (Sandbox Code Playgroud)

匹配的百分比应该是

100%
56.78%
34.6789%
Run Code Online (Sandbox Code Playgroud)

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

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

vks*_*vks 13

\\d+(?:\\.\\d+)?%
Run Code Online (Sandbox Code Playgroud)

这应该为你做.

对于更严格的测试用途,

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

见演示.

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


Men*_*ena 5

你没有对你的点进行双重转义,这意味着它是任何字符的通配符,包括空格。

使用类似的东西:

 ? 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+)?%"
Run Code Online (Sandbox Code Playgroud)

例如:

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());
}
Run Code Online (Sandbox Code Playgroud)

输出

Found: 100%
Found: 56.78%
Found: 78.90%
Found: 34.6789%
Run Code Online (Sandbox Code Playgroud)

笔记

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

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

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

或者,您可以简单地调用Matcher#matches而不是Matcher#find.

下一步

您可能想要对正在检索的数值做一些事情

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

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


Sau*_*pta 5

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

在这里检查这个正则表达式: https: //regex101.com/r/Ou3mJI/2

您可以使用此正则表达式。它的有效期为:

  1. 0 到 100(含)
  2. 带小数位和不带小数位

以下是有效值:

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

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

  1. 负数
  2. 数量 > 100
  3. 带空格的数字

无效值示例:

-1%
99.989%
101%
56 78.90%

希望这会有所帮助!