我尝试使用正则表达式测试一个字符串在Java中的一个点之后是否以完全两位数结尾。怎么能实现这个目标?
像" 500.23"应该返回true,而" 50.3"或" 50"应该返回false。
我尝试了"500.00".matches("/^[0-9]{2}$/")
之类的内容,但它返回false。
答案 0 :(得分:4)
这是一个可能对您有帮助的RegEx:
^\d+\.\d{2,2}$
它既不是完美的也不是最有效的,但它应该引导你朝着正确的方向前进。
^
表示表达式应从此处开始
\d
会查找任意数字
+
说,领先的\ d可以根据需要经常显示(1-infinity)
\.
表示您希望在某一点上使用点(。)
\d{2,2}
就是诀窍:它说你想要2个正好2个数字(不少于更多)
$
告诉您表达式在那里结束(在2位数之后)
在Java中\需要进行转义,因此它将是:
^\\d*\\.\\d{2,2}$
修改强>
如果你不需要点之前的数字(.
),或者如果你真的不关心点之前的数字,那么你可以用{{替换第一个\d+
1}}如波希米亚人的回答。 (非转义)点表示表达式可以包含任何字符(不仅是digets)。然后甚至可能不再需要领先的.*
。
^
答案 1 :(得分:2)
使用此regex
String s="987234.42";
if(Pattern.matches("^\\d+(\\.\\d{2})$", s)){ // string must start with digit followed by .(dot) then exactly two digit.
....
}
答案 2 :(得分:1)
首先,正斜杠不是正则表达式的一部分。然而,它们被某些语言用于分隔正则表达式 - 但不是java,所以不要使用它们。
其次,在java matches()
中必须匹配整个字符串才能返回true(因此^
和$
隐含在正则表达式中。
试试这个:
if (str.matches(".*\\.\\d\\d"))
// it ends with dot then 2 digits
请注意,在java中,正则表达式中的bash斜杠需要通过字符串文字中的进一步反斜杠进行转义。