Java中十进制数的正则表达式是什么?

时间:2017-03-29 04:44:11

标签: java regex real-number

我不太确定Java中这段时间的正确正则表达式是什么。以下是我的一些尝试。可悲的是,他们都意味着任何角色。

String regex = "[0-9]*[.]?[0-9]*";
String regex = "[0-9]*['.']?[0-9]*";
String regex = "[0-9]*["."]?[0-9]*";
String regex = "[0-9]*[\.]?[0-9]*";
String regex = "[0-9]*[\\.]?[0-9]*";
String regex = "[0-9]*.?[0-9]*";
String regex = "[0-9]*\.?[0-9]*";
String regex = "[0-9]*\\.?[0-9]*";

但我想要的是实际的“。”性格本身。有人有想法吗?

我实际上要做的是写出一个非负实数的正则表达式(允许小数)。所以可能性是:12.2,3.7,2。,0.3,.89,19

String regex = "[0-9]*['.']?[0-9]*";
Pattern pattern = Pattern.compile(regex);

String x = "5p4";
Matcher matcher = pattern.matcher(x);
System.out.println(matcher.find());

最后一行应该打印false但无论如何都打印为true。我认为我的正则表达式是错误的。

4 个答案:

答案 0 :(得分:4)

  

更新

要匹配非负十进制数,您需要此正则表达式:

^\d*\.\d+|\d+\.\d*$

或java语法:"^\\d*\\.\\d+|\\d+\\.\\d*$"

String regex = "^\\d*\\.\\d+|\\d+\\.\\d*$"
String string = "123.43253";

if(string.matches(regex))
    System.out.println("true");
else
    System.out.println("false");
  

原始正则表达式尝试的说明:

[0-9]*\.?[0-9]*

使用java转义它变为:

"[0-9]*\\.?[0-9]*";

如果您需要将点作为必填项,则删除?标记:

[0-9]*\.[0-9]*  

但是这也只接受一个没有任何数字的点......所以,如果你想要验证数字是强制性的,你使用+(这意味着一个或多个)而不是*(这意味着零或更多) 。那种情况就变成了:

[0-9]+\.[0-9]+

答案 1 :(得分:0)

实际上有两种方法可以匹配文字.。一个是像你那样使用反斜杠转义\\.,另一种方法是将它包含在一个字符类或方括号中[.]大多数特殊字符都会成为方括号中的文字字符,包括.。因此,如果您想要的只是匹配文字点\\.,请使用[.]表明您的意图比.更清晰。如果您需要匹配多个符合此的内容,请使用[],例如此正则表达式[\\d.]表示匹配单个数字或字面点

答案 2 :(得分:0)

您最初的理解可能是正确的,但是您被抛出是因为在使用matcher.find()时,您的正则表达式会在字符串中找到第一个有效匹配,而您的示例的所有将匹配一个零长度的字符串。

我建议"^([0-9]+\\.?[0-9]*|[0-9]*\\.[0-9]+)$"

答案 3 :(得分:0)

如果您使用Kotlin,请使用ktx:

fun String.findDecimalDigits() =
    Pattern.compile("^[0-9]*\\.?[0-9]*").matcher(this).run { if (find()) group() else "" }!!