我有这样的文字:
120.65UAH Produkti Kvartal
5*14 14:24
Bal. 16603.52UAH
我想做什么: 如果此文本包含" 5 * 14",我需要通过一个java reg exp获得16603.52。
我尝试创建这样的条件regexp:
(5*14 ([\d\.*]+)UAH)
(5*14 d{2}:d{2} Bal. ([\d\.*]+))
等
但没有运气,请你分享一下
答案 0 :(得分:2)
你可以使用这样的正则表达式:
(?=5\*14)[\s\S]*?(\d{5}\.\d{2})
<强> Working demo 强>
更新:你甚至不需要展望未来,你可以使用:
5\*14[\s\S]*?(\d{5}\.\d{2})
答案 1 :(得分:0)
(\d*\.\d\d)(?>\w*)$
将匹配行中最后一组DDDDD.DD上的组。您需要获取第一个匹配组的内容。
答案 2 :(得分:0)
如果你有5*14
之前你需要获得的浮点数,你可以使用
(?s)\\b5\\*14\\b.*?\\b(\\d+\\.\\d+)
见demo。该值将在第1组中。我还使用了Java转义样式。
请注意,5\*14
可以与145*143
匹配,这就是我使用字边界\b
的原因。 .*?
(?s)
\d+\.\d+
匹配任意数量的符号,但尽可能少。 String str = "120.65UAH Produkti Kvartal\n5*14 14:24\nBal. 16603.52UAH";
Pattern ptrn = Pattern.compile("(?s)\\b5\\*14\\b.*?\\b(\\d+\\.\\d+)");
Matcher matcher = ptrn.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
匹配简单浮点数(不论其中的位数)。
16603.52
结果:inverse_of