java - 正则表达式小数(动态)Java

标签 java regex decimal

我需要你的帮助,因为我有一个正则表达式来验证正在接收的浮点类型,这是因为小数分隔符可以作为 .,I 到达没有办法强制使用单一类型的分隔符,所以我想通过正则表达式来验证它,但我无法完成它,我尝试了多种方法,但我没有设法获得预期的结果,请指导我。

数字: 171171.0017701,7001,700.001,777,777, 1,777,777.00,,1777777.00

常规短语

 

  1. 选项:字符串patternString = "^[0-9]{0,3}+|(\\,[0-9]{0,3})+(\\.[0-9] {0,2})?$
  2. 选项:字符串patternString = "^[0-9]{0,3}|(\\,[0-9]{0,3})(\\.[0-9]{0 ,2})?$";
  3. 选项:字符串patternString = "^[0-9]+(\\,[0-9]{0,})+(\\.[0-9]{0,})?$ | ^[0-9]+(\\,[0-9]{0,})?$";
  4. 选项:字符串patternString = "^[0-9]+(\\.[0-9]{0,})+(\\,[0-9]{0,})?$ ”;
<小时/>

预期结果:

对于这种情况,我仅评估数字模式为 #, ## 0.00 的情况,对于其他情况,我认为只会投资 ,.

选项 1:

  • 1.71 - 好的
  • 1.71717171 - 好的
  • 171 - 好的
  • 171.00 - 好的
  • 1770 - 好的
  • 1,700 - 好的
  • 1,700.00 - 好的
  • 1,777,777 - 好的
  • 1,777,777.00 - 好的
  • 1777777.00 - 好的

选项 2:

  • 171,00 - 错误(假)
  • 1,700.00 - 错误(False)
  • 1,777,777 - 错误(False)
  • 1,777,777.00 - 错误(假)
  • 1777777,00 - 错误(False)
  • 1,00 - 错误(假)

最佳答案

在您的示例数字中,您以 1+ 次数字开始。接下来是一个可选的重复部分,匹配一个逗号和 3 次数字,数字以一个可选的点和 2 次数字或一个点后跟 1+ 次数字结尾。

您可以使用和 alternation :

^\d+(?:(?:,\d{3})*(?:\.\d{1,2})?|\.\d+)$

在 Java 中:

String regex = "^\\d+(?:(?:,\\d{3})*(?:\\.\\d{1,2})?|\\.\\d+)$";

说明

  • ^ 字符串开头
  • \d+ 匹配 1 个以上数字
  • (?: 非捕获组
    • (?:,\d{3})* 重复 0 次以上匹配逗号和 3 位数字
    • (?:\.\d{1,2})? 可选择匹配一个点和 2 位数字
  • | 或者
  • \.\d+ 匹配点和 1+ 位数字
  • ) 关闭非捕获组
  • $ 字符串结尾

请参阅regex demo

关于java - 正则表达式小数(动态)Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54819816/

相关文章:

java - 替换可能包含正则表达式的整个标记

大于累加器大小的二进制数转换为十进制字符

python - Django 中的全局小数舍入选项

java - 如何从 github 库构建 gradle jar

java - 在 foreach 循环中为 <td> 生成动态 ID

java - 我必须同心圆如何限制内圆在外圆内的阻力+java

java - 将进口报关单添加到正确的位置

java - 正则表达式从字符串数据中获取特定值

php - 使用 preg_match 在字符串中查找百分比值

c# - 将指数数转换为十进制数 1.11111117E+9 - 尾随数字变为零