我已经定义了一个模式
(?:.*+)(?<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.
发布于 2017-02-17 10:42:20
您需要在字符串末尾查找部分匹配。为此,删除阻止yout模式匹配的.*+
(拥有式量词关闭回滚),并使用只匹配字母([a-zA-Z]+
)或非空格字符(\S+
)的模式限制.+
,并添加字符串锚点的$
末端。使用
(?<amount>\d*\.?\d+)\s*(?<unit>[a-zA-Z]+)$
用Matcher#find()
。见regex演示。
Java演示
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));
}
https://stackoverflow.com/questions/42295639
复制相似问题