有一个字符串“12.2A12W99.0Z0.123Q9”
我需要找到3组:(double或int)(nondigit)(double或int)
所以在样本的情况下,我希望这种情况发生:
matcher.group(1)=“12.2”
matcher.group(2)=“A”
matcher.group(3)=“12”
我当前的正则表达式只匹配整数:“^(\ d +)(\ D)(\ d +)” 所以我希望将组(\ d +)更改为与整数或双精度匹配的组。
我完全不理解正则表达式,所以像我5那样的解释会很酷。
答案 0 :(得分:1)
尝试以下代码: - 您的正则表达式仅匹配数字字符。为了也匹配小数点,你需要:
Pattern.compile("\\d+\\.\\d+")
private Pattern p = Pattern.compile("\\d+(\\.\\d+)?");
。被转义,因为这将在未转义时与任何角色匹配。
注意:这将只匹配带小数点的数字,这就是你的例子中的数字。
private Pattern p = Pattern.compile("\\d+(\\.\\d+)?");
public void testInteger() {
Matcher m =p.matcher("10");
assertTrue(m.find());
assertEquals("10", m.group());
}
public void testDecimal() {
Matcher m =p.matcher("10.99");
assertTrue(m.find());
assertEquals("10.99", m.group());
}