LINUX.ORG.RU

regexp условия

 


0

1

Как через regexp задать условие >4.0 ? Т.е.

Есть у нас:

5.4 inches
12.6 inches
1.2 inches

Мне надо чтобы 1.2 был исключен. Что-то у него синтаксис просто ужасный. Точка присутствует всегда.

★★★★★

Последнее исправление: steemandlinux (всего исправлений: 1)

Ответ на: комментарий от anonymous

Исключить экраны меньше 4 дюймов. Я знаю что можно через используемый ЯП сделать, но это же реально и через regexp?

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Сорри, регулярку я не проверял, но смысл в том, что проверяешь чтоб первый символ был в диапазоне от 5 до 9. Второй и далее опционален. Потом точка. Потом опять диапазон.

Типа [5-9][0-9]*\.[0-9]+

Deleted
()
Ответ на: комментарий от steemandlinux

регулярки - это обработка текста. Для работы с числами они подходят плохо

Deleted
()

Не понимаю возмущений в комментариях. Все же тривиально.

Deleted
()
Ответ на: комментарий от steemandlinux

Бгг, я затупил)

Щас приземлюсь и накатаю.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted
([5-9]|[1-9]\d+)\.d+

Иногда такое бывает полезно, например, выгрепать адреса IPV4. Но в общем случае это изврат. Регэкспы дороги, не надо их зря усложнять.

anonymous
()
Ответ на: комментарий от redgremlin

Доперло, это 2 регекса. Я думал OR это фича грепа и даже не пытался подставить.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)

Здесь только одно очевидное и правильное решение: выделение числа и проверка его на ваше условие. Других вариантов городить не стоит.

Итого: value -> regexp "(\d+(?:\.\d+)?) inches" -> if ($1 > 4.0) then ... else ...

sanwashere ★★
()
Последнее исправление: sanwashere (всего исправлений: 2)
Ответ на: комментарий от anonymous

Перечитал условие. Надо что-то вроде:

 
[4-9]\d*\.[1-9]+|[1-9]\d+\.\d+

Чтоб включить 4.[1-9]

Или можно короче?

Не уверен, что не тупанул опять 😁

Deleted
()
Ответ на: комментарий от redgremlin

условие >4.0

printf «5.4 inches\n12.6 inches\n1.2 inches\n4.9 inches\n» | grep -E '([[:digit:]]{2,}\.[[:digit:]]|[56789]\.[[:digit:]])'

5.4 inches 12.6 inches

anonymous
()

Что-то у него синтаксис просто ужасный.

Не. Это просто ты тупой. Ну или ещё хуже - гуманитарий.

anonymous
()
Ответ на: комментарий от anonymous

Это и есть гуманитарщина, как и 99% программирования.

steemandlinux ★★★★★
() автор топика

В качестве спортивного интереса накостылял тебе PCRE (у вас же в питоне PCRE, да?):

/(?:\d{2,}.\d|[5-9].\d|4.[1-9]) inches/

https://ideone.com/qqrYmr

Но чувак, ты пробуешь использовать отвертку там где нужен молоток.

KennyMinigun ★★★★★
()
Ответ на: комментарий от redgremlin

Ради спортивного интереса сломал Вам регулярку.

printf "5.4 inches\n12.6 inches\n01.2 inches\n" | grep -E '([[:digit:]]{2,}\.[[:digit:]]|[56789]\.[[:digit:]])'
05.4 inches
12.6 inches
01.2 inches
Deleted
()
Ответ на: комментарий от Deleted

Но у меня не рандомный ввод школоты, поэтому такие случаи не рассматриваю.

steemandlinux ★★★★★
() автор топика
perl -ne 'print if /^(\d+\.\d+)(??{"(*F)" if $1 < 4.1})/' <<END
> 5.4 inches
> 12.6 inches
> 1.2 inches
> END
5.4 inches
12.6 inches

Но питон (и PCRE), наверное, так не умеет.

Jini ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.