我需要您的帮助,因为我有一个正则表达式来验证所接收的浮点类型,这是因为小数点分隔符可能以.
或,
的形式到达强制使用一种类型的分隔符,以至于我想通过regex
对其进行验证,但我无法完成它,我已经尝试了几种方法,但是我没有设法获得预期的结果,您可以请引导我。
数字:
171
,171.00
,1770
,1,700
,1,700.00
,1,777,777
,1,777,777.00
,1777777.00
>
常规词组
String patternString = "^[0-9]{0,3}+|(\\,[0-9]{0,3})+(\\.[0-9]{0,2})?$
String patternString = "^[0-9]{0,3}|(\\,[0-9]{0,3})(\\.[0-9]{0,2})?$";
String patternString = "^[0-9]+(\\,[0-9]{0,})+(\\.[0-9]{0,})?$ | ^[0-9]+(\\,[0-9]{0,})?$";
String 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
-错误(假)1,777,777
-错误(假)1,777,777.00
-错误(假)1777777,00
-错误(假)1,00
-错误(假)答案 0 :(得分:1)
在示例数字中,您以数字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