【问题标题】:JAVA get unit of measure and measurement from a string [closed]JAVA从字符串中获取度量单位和度量单位[关闭]
【发布时间】:2016-08-24 06:01:20
【问题描述】:

我有一个字符串:

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

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

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

编辑: 应该出现这些关键字之一

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.

我想获取计量单位及其对应的计量单位。

【问题讨论】:

标签: java string extract


【解决方案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

【讨论】:

  • 当前表达式也将匹配2 girls中的2 g
  • 是的,我刚刚注意到您的(?:\.|\b) 更改,我认为这很重要。你是绝对正确的!自己错过了这一点
  • 另外,介意我问一下如果在字符串的开头找到它是否可以跳过?
  • 如果您只需要模式的第一次出现,只需将while (matcher.find()) {...} 更改为if (matcher.find()) {...}
猜你喜欢
  • 1970-01-01
  • 2011-09-22
  • 2021-11-29
  • 1970-01-01
  • 2015-10-28
  • 2015-10-03
  • 2011-09-24
  • 1970-01-01
  • 2018-11-18
相关资源
最近更新 更多