正则表达式从单个组中的java中的字符串中查找整数或小数?

我在这个示例字符串上尝试(\d+|\d+\.\d+)

 Oats 124 0.99 V 1.65 

但是当我在Java中使用模式匹配器类时,它给出了不同组中的十进制数。

我希望我的答案在一个小组中。

您不需要为整数和浮点数设置单独的模式。 只需将小数部分设为可选,您就可以从一个组中获得两种类型的数字。

 (\d+(?:\.\d+)?) 

使用上面的模式并从组索引1中获取数字。

DEMO

码:

 String s = "Oats 124 0.99 V 1.65"; Pattern regex = Pattern.compile("(\\d+(?:\\.\\d+)?)"); Matcher matcher = regex.matcher(s); while(matcher.find()){ System.out.println(matcher.group(1)); } 

输出:

 124 0.99 1.65 

图案说明:

  • () 捕获组。
  • \d+匹配一个或多个数字。
  • (?:) 非捕获组。
  • (?:\.\d+)? 匹配一个点和以下一个或多个数字。 ? 在非捕获组之后使整个非捕获组成为可选的。

要么

只有在更改模式的顺序时,正则表达式才会起作用。

 (\d+\.\d+|\d+) 

DEMO

试试这种模式:

 \d+(?:\.\d+)? Edit: \d+ match 1 or more digit (?: non capturing group (optional) \. '.' character \d+ 1 or more digit )? Close non capturing group 

问题不完全清楚,但我看到的第一个问题是。 是正则表达式中的魔术角色,意思是任何角色。 你需要用as来逃避它。 那里有很多正则表达式的备忘单,例如JavaScript Regex Cheatsheet

 (\d+|\d+\.\d+)