2016-08-24 3 views
-4

У меня есть строка:JAVA получить единицу измерения и измерения из строки

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

Можно ли извлечь единицы измерения из заданной строки? (2 л)

Примечание: единица измерения и измерения может отображаться в любом месте строки.

EDIT: Один из этих ключевых слов должны появиться

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. 

Я хотел бы получить единицу измерения и его соответствующее измерение.

+2

Итак, каковы правила? или «когда вы» действительное измерение? –

+0

Извините, я не смог опубликовать правила. При появлении любого из этих ключевых слов: унций. oz lbs. кг фунта кг. кг k g. g pk. pk ea. ea мл. мл. pck ct. ct qt. qt liter ltr ltr. fl oz fl oz. Я хотел бы получить единицу измерения при соответствующем измерении. – user1573796

+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

+0

Текущее выражение также будет соответствовать '2 g' в' 2 girls' –

+0

Да, я только что заметил ваше изменение '(?: \. \ \ B)', которое я считаю решающим. Вы абсолютно правы! Пропустил этот момент самостоятельно –

+0

Кроме того, помните, если я спрошу, можно ли пропустить, если он найден в начале строки? – user1573796