Я рекомендую очень строгий синтаксический анализатор, который генерирует исключение всякий раз, когда он сталкивается с чем-то, что он не может обработать явно. Таким образом вы избавитесь от неожиданностей.
Прежде всего, вы должны использовать для этого язык сценариев.
Извлекает записи и перебирает их, и для каждой записи вы пытаетесь их проанализировать:
^([1-9][0-9]*)x([1-9][0-9]*)([a-z]+)$
- если он совпадает, вы сопоставляете $3
со списком действительных единиц, например, «см», «мм», «м» и т. Д.
^([1-9][0-9]*)([^ ]+) by ([1-9][0-9]*)(.+)$
- если он совпадает, сравнить единицы в матче $2
и $4
. Снова сопоставьте их со списком действительных единиц, и, если они успешны, но они не совпадают, конвертируйте одну в другую.
Вы продолжаете добавлять строгие проверки для каждого элемента, который вызывает исключение. Таким образом, ваш список выражений расширяется с учетом обращений, которые вы обрабатываете.