JAVA从字符串

时间:2016-08-24 06:01:21

标签: java string extract

我有一个字符串:

String = "2 ltr. btl., select   varieties when you buy 6 $1.25 ea.-50¢  MIX OR MATCH";

是否可以从给定的字符串中提取测量单位? (2 ltr)

注意:测量单位和测量单位可以出现在字符串中的任何位置。

编辑: 其中一个关键字应该出现

oz. oz lbs. lbs lb. lb kg. kg k g. g pk. pk ea. ea ml. ml pck. pck ct. ct qt. qt liter ltr ltr. fl oz fl oz.

我想得到测量单位及其相应的测量值。

1 个答案:

答案 0 :(得分:1)

提取金额(带有可选的小数部分)及其度量单位的正则表达式是:

(?x)\d+(?:\.\d+)?\s+
  (?:
     (?:fl )?oz(?:\.|\b)|lbs?(?:\.|\b)|kg(?:\.|\b)|kg?\b|g(?:\.|\b)
   | pc?k(?:\.|\b)|ea(?:\.|\b)|ml(?:\.|\b)|[cq]t(?:\.|\b)
   | liter\b|ltr(?:\.|\b)
  )

演示:https://regex101.com/r/uZ7yZ6/4

对应的Java代码:

String input = "2 ltr. btl., select   varieties when you buy 6 $1.25 ea.-50¢  MIX OR MATCH";
Pattern pattern = Pattern.compile(
      "(?x)\\d+(?:\\.\\d+)?\\s+"
    + "  (?:"
    + "     (?:fl )?oz(?:\\.|\\b)|lbs?(?:\\.|\\b)|kg(?:\\.|\\b)|kg?\\b|g(?:\\.|\\b)"
    + "   | pc?k(?:\\.|\\b)|ea(?:\\.|\\b)|ml(?:\\.|\\b)|[cq]t(?:\\.|\\b)"
    + "   | liter\\b|ltr(?:\\.|\\b)"
    + "  )"
);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
    System.out.println(matcher.group());
}

https://ideone.com/pGDVVm