Я пытаюсь использовать регулярные выражения, чтобы определить, содержит ли строка значение менее 500 футов.Важно отметить, что существуют некоторые ключевые ограничения и предположения для сопоставления:
- Можно предположить, что запятые были удалены.Десятичные числа гарантированно равны
.
, а не ,
- Невозможно предположить, что числовому значению предшествует пробел.
- Можно предположить, что "футы" будут записаны как "футы" или "футов "
- Может принимать нижний регистр
- Десятичные знаки могут быть любой длины
- Между числом и словом" футов "или" футов "или" футов "может быть любое число
Мои попытки на данный момент:
Попытка 1
\b[1-4]{0,1}[0-9]{1,2}(\.[0-9]{1,}}){0,1} {0,}(ft|feet)\b
Это было хорошо, но не смогло учесть десятичные дроби и соответствует значениям, таким как 1000.5 футов(соответствует «5 футов»)
Попытка 2
Моя следующая попытка состояла в том, чтобы включить отрицательный взгляд назад, чтобы убедиться, что совпадению не предшествовало .
или любое число.
(?<!(\.|[0-9]))([1-4]{0,1}[0-9]{1,2}(\.[0-9]{1,}}){0,1} {0,}(ft|feet))\b
К сожалению, это не соответствует ни одному десятичному числу (например, 5,5 футов должно соответствовать, но не соответствует).Я подозреваю, что неправильно понимаю, как работает отрицательный внешний вид.
Буду признателен за любую помощь в понимании, где я ошибаюсь!
Тестовые случаи:
- "1 фут в высоту" - соответствует
- "1 фут в высоту" - соответствует
- "1,1 фута в высоту" - соответствует
- "Он 6 футов" -соответствует
- "499,555 футов" - соответствует
- "Он 2 метра" - нет совпадений
- "500 футов" - нет совпадений
- «Здание высотой 1000,405 футов» - не соответствует