我有以下字符串:
0 days 00 hour 20 min 51 sec
我想使用Java的正则表达式从中提取所有数字:
Pattern pattern = Pattern.compile("(\\d){1,2} days (\\d){2} hour (\\d){2} min (\\d){2} sec");
Matcher m = pattern.matcher("0 days 00 hour 20 min 51 sec");
令我惊讶的是m.group(4)
返回1而不是51.同样适用于m.group(2)
,它返回0而不是00
我发现这令人困惑,因为{n}应该恰好匹配前面表达式的n次出现,不是吗?
答案 0 :(得分:4)
您可能想要捕获同一组中的两个数字:
"(\\d{1,2}) days (\\d{2}) hour (\\d{2}) min (\\d{2}) sec"
这就是原始表达式的作用。
0 days 00 hour 20 min 51 sec
(\d){1,2}
匹配0,将其置于第1组(\d){2}
匹配0,将其置于第2组,再次匹配0,将其置于第2组(\d){2}
匹配2,将其置于第3组,匹配0,将其置于第3组(\d){2}
匹配5,将其置于第4组,匹配1,将其置于第4组你现在有:
答案 1 :(得分:3)
{...}
结构应位于(...)
括号内,例如
Pattern.compile("(\\d{1,2}) days (\\d{2}) hour (\\d{2}) min (\\d{2}) sec");
答案 2 :(得分:0)
它应该是(\\d{1,2})
你将重复操作员排除在小组之外。