Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA从字符串中获取度量单位和度量值_Java_String_Extract - Fatal编程技术网

JAVA从字符串中获取度量单位和度量值

JAVA从字符串中获取度量单位和度量值,java,string,extract,Java,String,Extract,我有一个字符串: 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 lt

我有一个字符串:

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.

我想获得计量单位及其相应的计量单位。

用于提取金额的正则表达式(带可选小数部分),其计量单位为:

(?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)
  )
演示:

对应的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());
}

那么规则是什么?或者当您是一个有效的度量值时,
是吗?对不起,我没有发布规则。当这些关键词出现时:盎司磅磅公斤。千克千克。g pk。pk ea。每毫升。毫升pck。pck-ct。ct qt。qt升ltr ltr.fl oz fl oz。我想得到相应测量值的测量单位。因此,一些数字输入正则表达式后跟空格,后跟任何关键字?试试。更好:。当前表达式也将匹配
2个女孩中的
2 g
是的,我刚刚注意到您的
(?:\.\124;\ b)
更改,我认为这是至关重要的。你完全正确!我自己也错过了这一点,介意我问一下,如果在字符串开头找到它,是否可以跳过?如果您只需要模式的第一次出现,只需将
while(matcher.find()){…}
更改为
if(matcher.find()){…}