我想通过正则表达式从字符串中提取欧元金额。
现在我只得到 5
所以我不能理解我的错误。如何有一个合适的解决方案看起来也像检测变种一样 17,05 Euro
或者 85 EUR
在我的弦里?
String regExp = ".*([0-9]+([\\,\\.]*[0-9]{1,})?) *[Eu][Uu][Rr][Oo]? .*";
Pattern pattern = Pattern.compile(regExp);
String input1 = "aerae aerjakaes jrj kajre kj 112123 aseraer 1.05 Eur aaa";
Matcher matcher = pattern.matcher(input1);
matcher.matches();
System.out.println(matcher.group(1));
结果: 5
2条答案
按热度按时间dw1jzc5e1#
你只得到
5
因为第一个.*
是贪婪的,首先获取整行,然后逐字符回溯,直到随后的子模式匹配。这就是为什么只捕获最后一个数字,因为您的模式只需要1。你可以用一个更简单的模式
Matcher#find
:查看java演示
(?i)
-不区分大小写的修饰符(无需写入[eE][Uu]
...)([0-9]+(?:[.,][0-9]+)?)
-第1组:[0-9]+
-一个或多个数字(?:[.,][0-9]+)?
-可选序列:[.,]
-文字.
或者,
符号[0-9]+
-一个或多个数字\\s*
-0+空格euro?
-aeur
或者euro
子字符串。你甚至可以减少
[0-9]+(?:[.,][0-9]+)?
至[0-9][.,0-9]*
子模式匹配一个数字后跟0+个数字,.
或者,
如果课文写得好。stszievb2#
替换:
使用:
这适用于您提供的变体。