由正则表达式提取Java的持续时间

时间:2017-02-17 10:33:49

标签: java regex

我已经定义了一个模式

(?:.*+)(?<amount>\\d++\\.?+\\d*+)(\\s*+)(?<unit>.++)

匹配

之类的字符串
5-6 minutes
2 minutes
2.5 hours
1 to 2 minutes
~2 hours

我想提取以上所有内容的最后一部分,如

6 minutes
2 minutes
2.5 hours
2 minutes
2 hours

但正则表达式不起作用:( 想法?

修改:Pattern.compile("5-6 minutes").matcher().find()应该产生true,但是false.

1 个答案:

答案 0 :(得分:2)

您需要在字符串末尾查找部分匹配项。为此,请删除阻止您使用模式的.*+(占有量词关闭后退),并使用仅匹配字母(.+)的模式限制[a-zA-Z]+ ,或非空白字符(\S+),并添加$字符串锚点结束。使用

(?<amount>\d*\.?\d+)\s*(?<unit>[a-zA-Z]+)$

Matcher#find()。请参阅regex demo

Java demo

String s = "5-6 minutes";
Pattern pattern = Pattern.compile("(?<amount>\\d*\\.?\\d+)\\s*(?<unit>[a-zA-Z]+)$");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
    System.out.println(matcher.group(0)); 
}