┌ 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());
}
5条答案
按热度按时间hgncfbus1#
这个应该够你用了。
对于更严格的测试用途,
参见演示。
https://regex101.com/r/zsNIrG/2
4zcjmb1e2#
您没有对点进行双转义,这意味着它是任何字符的通配符,包括空格。
使用类似于:
例如:
这仍然匹配第三个输入,但仅匹配最后一部分。
如果希望第三个输入不匹配,可以用输入边界包围模式,例如
^
表示输入开始,$
表示输入结束。这将成为:
"^\\d+(\\.\\d+)?%$"
或者,您可以简单地调用
Matcher#matches
而不是Matcher#find
。你可能想对你正在检索的数值做一些事情。
在这种情况下,可以用一个组(
"(\\d+(\\.\\d+)?)%"
)包围模式,并在反向引用上调用Double.parseDouble
或new BigDecimal(...)
:Double.parseDouble(m.group(1))
new BigDecimal(m.group(1))
j2datikz3#
^((100)|(\d{1,2}(.\d)?))%$*
请检查以下正则表达式:https://regex101.com/r/Ou3mJI/2
您可以使用此正则表达式。它适用于:
1.带和不带小数位
以下是有效值:
100%有效
99.802%有效
98.7%有效
57%有效
0%有效
此正则表达式使以下值无效:
1.负数
1.数量〉100
1.带空格的数字
无效值示例:
-1%
九十九点九八九
101%
56人占78.90%
希望这会有帮助!
nwlqm0z14#
RegEx
\\d+(\\.?\\d+)?%
可以工作。c3frrgcw5#
这个答案的所有功劳都归于@vks,但我正在寻找一个匹配的正则表达式:
这包括排除负数的负前瞻
(?<!-)
。