Top.Mail.Ru
Ответы

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

From zero to hero
Условие:
Напишите регулярное выражение, которое найдёт все числа x, где:

x ∈ [0, 1] т.е. 0 ≤ x ≤ 1

Что нужно найти:
Нужно найти числа x, подходящие по следующим условиям:

x ∈ [0, 1] т.е. 0 ≤ x ≤ 1

x может быть как и десятичной дробью, так и целым числом

Если x - десятичная дробь, то её максимальная точность должна быть до сотых

В тестах не будет 0.00/0.0 или 1.00/1.0. Эти числа будут записаны без плавающей точки

Sample Input 1:
0.3 1.32 1 -6 1 6 0.77 1 2 0.4 0 0.356 0.32 0.7

Sample Output 1:
0.3 1 1 0.77 1 0.4 0 0.32 0.7

Sample Input 2:
10.01 10.11 11.11 1.01 1.11 1.001 10.001 0.11 0.10 0.111 0.101 10.0101 0.4352 0.45262 0.645475 0.5546448 0.16 0 1

Sample Output 2:
0.11 0.10 0.16 0 1

Sample Input 3:
10a01 10h11 11\11 1501 10|001 10,0101 8745 2052 50.25

Sample Output 3:

Код:

1
 regex = r"\b(?:0(?:\.[0-9]?[1-9])?|1(?:\.0{1,2})?)\b"  

Ошибка:
Failed test #1 of 3.

Твой ответ:
0.3 1 1 1 0.77 1 0.4 0 0 0.32 0.7

Правильный ответ:
0.3 1 1 0.77 1 0.4 0 0.32 0.7

Как сделать?

По дате
По Рейтингу
Аватар пользователя
Новичок
1
 regex = r'\b(?:[01]|0\.\d{1,2})(?=\s|$)' 

Полагаю, тоже некорректно (например, нет проверки на символ минуса перед числом), но результат куда ближе к заявленному.

Аватар пользователя
Профи

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

1. x ∈ [0, 1] (т.е. 0 ≤ x ≤ 1).
2. x может быть как десятичной дробью, так и целым числом.
3. Если x - десятичная дробь, то её максимальная точность должна быть до сотых.

В вашем текущем регулярном выражении не учтено условие #3. Чтобы исправить это, вы можете использовать следующее регулярное выражение:

\b(?:0(?:\.\d{1,2})?|1(?:\.0{1,2})?)\b

Это выражение учитывает условия #1, #2 и #3. Вот как оно работает:

- `\b` - граница слова, чтобы убедиться, что найденное число не является частью другого слова.
- `(?:0(?:\.\d{1,2})?|1(?:\.0{1,2})?)` - это группа, которая содержит два альтернативных выражения:
- `0(?:\.\d{1,2})?` - соответствует числам от 0 до 1 с до двух знаками после запятой.
- `1(?:\.0{1,2})?` - соответствует числу 1 с нулем или до двух нулей после запятой.
- `\b` - снова граница слова, чтобы убедиться, что найденное число завершено.

Это регулярное выражение должно дать правильные результаты для задачи.

Аватар пользователя
Знаток

Говорила мама мне учиться алгебре... ничего не понял

Попробуй через нейронку прогнать (хотя бы в вк ChatGPT)

Аватар пользователя
Мыслитель

сметана