Java条件正则表达式

时间:2015-09-07 22:22:56

标签: java regex parsing

我有这样的文字:

120.65UAH Produkti Kvartal
5*14 14:24
Bal. 16603.52UAH

我想做什么: 如果此文本包含" 5 * 14",我需要通过一个java reg exp获得16603.52。

this

and this

and this

我尝试创建这样的条件regexp:

(5*14 ([\d\.*]+)UAH)
(5*14 d{2}:d{2} Bal. ([\d\.*]+))

但没有运气,请你分享一下

3 个答案:

答案 0 :(得分:2)

你可以使用这样的正则表达式:

(?=5\*14)[\s\S]*?(\d{5}\.\d{2})

<强> Working demo

enter image description here

更新:你甚至不需要展望未来,你可以使用:

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)); } 匹配简单浮点数(不论其中的位数)。

IDEONE demo

16603.52

结果:inverse_of