Регулярное выражение для соответствия размерам объекта

Я скажу прямо: я ужасен с регулярными выражениями. Я пытался придумать один, чтобы решить мою проблему, но я действительно мало о них знаю. . .

Представьте себе несколько предложений следующего содержания:

  • Привет, бла-бла. Это около 11 1/2 дюймов на 32 дюйма.
  • Размеры 8 х 10-3 / 5!
  • Вероятно, где-то в районе 22 x 17 дюймов.
  • Рулон довольно большой: 42 1/2 дюйма на 60 ярдов.
  • Все они имеют размер 5,76 на 8 кадров.
  • Да, может быть, это около 84 см в длину.
  • Я думаю о 13/19 ». .
  • Нет, наверное, 86 см.

Я хочу как можно точнее извлечь измерения предмета из этих предложений. В идеальном мире регулярное выражение будет выводить следующее:

  • 11 1/2 "x 32"
  • 8 x 10-3 / 5
  • 22 "x 17"
  • 42 1/2 "x 60 ярдов
  • 5,76 на 8
  • 84 см
  • 13/19 "
  • 86 см

Я представляю себе мир, в котором действуют следующие правила:

  • Следующие допустимые единицы измерения: { см, мм, ярд, ярды, ", ', футы} , хотя я бы предпочел решение, которое учитывает произвольный набор единиц, а не явное решение для вышеуказанных единиц.
  • Измерение всегда описывается численно, может иметь или не иметь единицы, следующие за ним, а также может иметь или не иметь дробную или десятичную часть. Допускается самостоятельное составление дробной части, например, 4/5 ".
  • Дробные части всегда имеют / , разделяющие числитель / знаменатель, и можно предположить, что между частями нет пробела (хотя, если кто-то примет это во внимание, это здорово!).
  • Размеры могут быть одномерными или двумерными, и в этом случае можно предположить, что для разделения двух измерений приемлемы следующие параметры: {x, by} . Если размер только одномерный, он должен иметь единицы измерения из набора выше, то есть 22 см в порядке, .333 нет, и не 4,33 унции .

Чтобы показать вам, насколько я бесполезен с регулярными выражениями (и чтобы показать, что я хотя бы пытался!), Я зашел так далеко. . .

[1-9]+[/ ][x1-9]

Обновление (2)

Ребята, вы очень быстрые и эффективные! Я собираюсь добавить несколько дополнительных тестовых примеров, которые не были охвачены регулярными выражениями ниже:

  • Предпоследний тестовый пример - 12 ярдов x.
  • Последний тестовый пример - 99 см.
  • В этом предложении нет измерений: 342/5553/222.
  • Три измерения? 22 "x 17" x 12 см
  • Это код продукта: c720 с другим номером 83 x лучше.
  • Само по себе число 21.
  • Объем не должен соответствовать 0,332 унции.

В результате должно получиться следующее (# означает, что ничего не должно совпадать):

  • 12 ярдов
  • 99 см
  • #
  • 22 "x 17" x 12 см
  • #
  • #
  • #

Я адаптировал ответ M42 ниже к:

\d+(?:\.\d+)?[\s-]*(?:\d+)?(?:\/\d+)?(?:cm|mm|yd|"|'|feet)(?:\s*x\s*|\s*by\s*)?(?:\d+(?:\.\d+)?[\s*-]*(?:\d+(?:\/\d+)?)?(?:cm|mm|yd|"|'|feet)?)?

Но хотя это решает некоторые новые тестовые примеры, теперь оно не соответствует следующим другим.В нем сообщается:

  • ПРОХОДИТ 11 1/2 "x 32"
  • (ничего) НЕ ИСПОЛЬЗУЕТСЯ
  • ПРОХОДИТ 22 "x 17"
  • ПРОХОДИТ 42 1/2 "x 60 ярдов
  • (ничего) НЕ ИСПОЛЬЗУЕТСЯ
  • ПРОШЕЛ 84 см
  • ПРОХОД 13/19 "
  • ПРОХОД 86 см
  • 22" ПРОХОД
  • (ничего) ОТКАЗ
  • (ничего) ОТКАЗ

  • 12 ярдов x ОТКАЗ

  • 99 cm by FAIL
  • 22 "x 17" [а также, но отдельно '12 cm '] FAIL
  • PASS

  • PASS

7
задан Community 23 May 2017 в 12:29
поделиться