正则表达式从单个组中的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+)