Я пытаюсь получить количество, единицу и вещество из строки с помощью регулярного выражения. Единицы и вещества взяты из заранее определенного списка.
So:
- «2 кг воды» должны вернуть:
2, kg, water
- «1 галлон сырой нефти» должен вернуть:
1, gallon, oil
Я могу добиться этого с помощью следующего регулярного выражения: (\d*) ?(kg|ml|gallon).*(water|oil)
Проблема в том, что я не могу понять, как сделать последнюю группу захвата необязательной. Если вещества нет в предопределенном списке, я все равно хочу получить количество и единицу. Так:
- «1 галлон дизельного топлива» должен вернуть:
1, gallon
или1, gallon, ''
Я попытался заключить последнюю группу в необязательную группу без захвата, как описано здесь: Regex с дополнительными полями захвата, но безуспешно.
Вот текущие параметры в онлайн-тестере регулярных выражений: https://regex101.com/r/hV3wQ3/55
(\d+) ?(kg|ml|gallon) of (.*)
и позже проверить список заранее определенных веществ? - person melpomene   schedule 07.03.2018?
, который соответствует от нуля до единицы.(water|oil)?
- person Srdjan M.   schedule 07.03.2018