java正则表达式提取欧元金额

w6lpcovy  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(386)

我想通过正则表达式从字符串中提取欧元金额。
现在我只得到 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

dw1jzc5e

dw1jzc5e1#

你只得到 5 因为第一个 .* 是贪婪的,首先获取整行,然后逐字符回溯,直到随后的子模式匹配。这就是为什么只捕获最后一个数字,因为您的模式只需要1。
你可以用一个更简单的模式 Matcher#find :

String regExp = "(?i)([0-9]+(?:[.,][0-9]+)?)\\s*euro?";
Pattern pattern = Pattern.compile(regExp);
String input1 = "aerae aerjakaes jrj kajre kj 112123 aseraer 1.05 Eur aaa";
Matcher matcher = pattern.matcher(input1);
if (matcher.find()) {
    System.out.println(matcher.group(1));
}

查看java演示 (?i) -不区分大小写的修饰符(无需写入 [eE][Uu] ...) ([0-9]+(?:[.,][0-9]+)?) -第1组: [0-9]+ -一个或多个数字 (?:[.,][0-9]+)? -可选序列: [.,] -文字 . 或者 , 符号 [0-9]+ -一个或多个数字 \\s* -0+空格 euro? -a eur 或者 euro 子字符串。
你甚至可以减少 [0-9]+(?:[.,][0-9]+)?[0-9][.,0-9]* 子模式匹配一个数字后跟0+个数字, . 或者 , 如果课文写得好。

stszievb

stszievb2#

替换:

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));

使用:

String regExp = "(?i)\\d*\\.*,*\\d*\\s(euro?)";
Pattern pattern = Pattern.compile(regExp);
String input1 = "aerae aerjakaes jrj kajre kj 112123 aseraer 1.05 Eur aaa";
Matcher matcher = pattern.matcher(input1);
if(matcher.find()) {
    System.out.println(matcher.group(0));

}

这适用于您提供的变体。

相关问题