Я прямо скажу: я ужасен с регулярными выражениями.Я пытался придумать один, чтобы решить мою проблему, но я действительно не знаю о них много.,.
Представьте себе несколько предложений в следующих строках:
- Здравствуйте, бла-бла.Это примерно 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 см.
Я хочу, насколько это возможно, просто извлечь размеры элементов из этихприговоры.В идеальном мире регулярное выражение будет выводить следующее:
- 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 см
Я представляю мир, в котором применяются следующие правила:
- Действительными являются следующие единицы:
{cm, mm, yd, yards, ", ', feet}
, хотя я бы предпочелрешение, которое рассматривает произвольный набор единиц, а не явное решение для вышеуказанных единиц. - Измерение всегда описывается численно, может иметь или не иметь следующие после него единицы измерения, а может иметь или не иметь дробное или десятичное числочасть.Допускается создание только дробной части, например,
4/5"
. - Дробные части всегда имеют
/
, разделяющий числитель / знаменатель, и можно предположить, что между частями нет пробела(хотя, если кто-то примет это во внимание, это здорово!). - Размеры могут быть одномерными или двухмерными, и в этом случае можно предположить, что для разделения двух измерений допустимо следующее:
{x, by}
.Если измерение является только одномерным, оно должно иметь единицы измерения из приведенного выше, то есть 22 cm
в порядке, .333
нет и 4.33 oz
.
Чтобы показать вам, насколько я бесполезен с регулярными выражениями (и показать, что я хотя бы попытался!), Я дошел до этого.,.
[1-9]+[/ ][x1-9]
Обновление (2)
Вы, ребята, очень быстрые и эффективные!Я собираюсь добавить дополнительные несколько тестовых случаев, которые не были охвачены регулярными выражениями ниже:
- Последний, но один тестовый случай - 12 ярдов x.
- Последний тестовый пример - 99 см.
- В этом предложении нет размеров: 342/5553 / 222.
- Три измерения?22 "x 17" x 12 см
- Это код продукта: c720 с другим номером 83 х лучше.
- Число само по себе 21.
- Объем не должен соответствовать 0,332 унции.
Это должно привести к следующему (# ничего не означаетдолжно совпадать):
- 12 ярдов
- 99 см
- #
- 22 "x 17" x 12 см
- #
- #
- #
Я адаптировал M42's ответ ниже, чтобы:
\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" PASS
- (ничего) FAIL
- 22 "x 17" PASS
- 42 1/2 "x 60 м ПРОЙДЕН
- (ничего) НЕУДАЧ *
- 84 см ПРОЙДЕН
- 13/19" ПРОЙДЕН
- 86 см1138 *
- 22 "PASS
- (ничего) FAIL
(ничто) FAIL
12 ярдов x FAIL
- 99 см по FAIL
- 22 "x 17" [а также, но отдельно '12 см'] FAIL
PASS
PASS