На первый взгляд, написание регулярных выражений для соответствия числам не должно стать неподъемной задачей, не так ли?
У нас есть метасимвол \d
для соответствия любой цифре, и всё, что нам нужно сделать — это добавить соответствие десятичной точке, верно? С простыми числами это легко, но при работе с научными или финансовыми значениями вам придется иметь дело с положительными и отрицательными числами, значащими цифрами, показателями степени и даже с различными представлениями (например, запятая, используемая для разделения тысяч и миллионов).
Ниже приведены несколько различных форматов чисел, с которыми вы можете столкнуться. Если у вас возникли проблемы с пропуском последнего числа, то обратите внимание на окончание этого числа по сравнению с окончаниями остальных чисел.
Задание | Текст | |
Соответствовать | 3.14529 | ![]() |
Соответствовать | -255.34 | ![]() |
Соответствовать | 128 | ![]() |
Соответствовать | 1.9e10 | ![]() |
Соответствовать | 123,340.00 | ![]() |
Пропустить | 720p | ![]() |
Решение | Регулярное выражение для этого задания может быть довольно-таки сложным, если принять во внимание дробную часть чисел, показатели степени и всё остальное.
Для примера, приведенного выше, выражение ^-?\d+(,\d+)*(\.\d+(e\d+)?)?$ будет соответствовать строке, которая начинается с необязательного отрицательного знака, одной или нескольких цифр, после которых необязательно следует запятая и еще несколько цифр, за которыми следует необязательная дробная часть значения, состоящая из точки, одной или нескольких цифр и необязательного показателя степени (символ Это не единственно правильное решение, у вас может быть и альтернативный вариант. |
Сначала ты думаешь что программирование — это сложно, а потом встречаешь регулярки
Не ленивый вариант может быть таким:
[+-]?((,\d{3,})|(\d+))+(\.\d+(e[+-]?\d+)?)?\b
Найти последовательность, которая составлена как правильное число, то есть:
может стоять + или — в начале
октеты чисел могут быть разведены ,
число может быть дробным
число может быть в экспоненциальной форме
является законченным словом (после него идет либо пунктуация либо пробел либо конец строки)
Самый короткий вариант ответа: \d$
Тут короче некуда
.*(?!p)
мой вариант соответствует всем строчкам и пропускает последнюю(судя по галочкам и зеленым символам), но кнопка продолжить не работает.Да, регулярки разбирать — тот ещё капец 🙂