我已经定义了一个模式
(?:.*+)(?<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.
答案 0 :(得分:2)
您需要在字符串末尾查找部分匹配项。为此,请删除阻止您使用模式的.*+
(占有量词关闭后退),并使用仅匹配字母(.+
)的模式限制[a-zA-Z]+
,或非空白字符(\S+
),并添加$
字符串锚点结束。使用
(?<amount>\d*\.?\d+)\s*(?<unit>[a-zA-Z]+)$
Matcher#find()
。请参阅regex 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));
}