正则表达式匹配数字之间的数字

时间:2016-09-29 08:31:41

标签: regex match regex-lookarounds

我有一个包含时间的字符串列表,格式如下。

15 min 43 sec

我只想提取43。我在http://regexr.com/练习但找不到答案。我现在得到的答案是\d+\s+min+\s+(\d*)+\s+sec,它与整个单词相匹配。但它应该只匹配43。期待很快的帮助。提前谢谢。

3 个答案:

答案 0 :(得分:1)

一个基本而快速的解决方案可以...... \s(\d+)\s 但试着找一个更好的;)

答案 1 :(得分:1)

使用lookaround

(\d+)(?=\s+sec)

答案 2 :(得分:0)

以下模式包含两个捕获组(分钟和秒),并允许值之间有任意数量的空格。如果只需要提取秒数,那么一组就足够了。

要提取值,请匹配输入(使用Matcher)并读取相应组的值matcher.group(n),其中1是第一组) :

Pattern pattern = Pattern.compile("(\\d+)\\s*min\\s*(\\d+)\\s*sec");
String[] data = {"15 min 43 sec", "15min 43sec", "15      min 43   sec"};
for (String d : data) {
    Matcher matcher = pattern.matcher(d);
    if (matcher.matches()) {
        int minutes = Integer.parseInt(matcher.group(1));
        int seconds = Integer.parseInt(matcher.group(2));
        System.out.println(minutes + ":" + seconds);
    } else {
        System.out.println("no match: " + d);
    }
}