我有一个字符串:
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.
我想得到测量单位及其相应的测量值。
答案 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());
}