Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/103: Рейтинг темы: голосов - 103, средняя оценка - 4.90
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
1

Регулярное выражение для целого и дробного типа(со знаком)

26.01.2016, 17:45. Показов 18543. Ответов 16

Author24 — интернет-сервис помощи студентам
Добрый день.
Требуется написать регулярное выражение, которое будет принимать целые и дробные числа со знаком или без него. Для дробных чисел приемлема запись вида ".5"(0.5).
В данный момент имею выражение вида:
Код
regExp: /(?=.)([+-]?(\d*)(\.(\d+))?)/
Но проблема в том, что оно принимает строку, содержащую только знак('+' или '-').
Возможно ли избежать такой ситуации и если да, то как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2016, 17:45
Ответы с готовыми решениями:

Регулярное выражение для дробного числа от 0 до 1
Помогите составить регулярное выражение для дробного числа от 0 до 1. Число типа double, после...

Регулярное выражение для типа данных MYSQL
Здравствуйте. При обращении к базе запросом SHOW COLUMNS FROM `table` Возвращается массив вида:...

Регулярное выражение для проверки поля типа float
Привет, Релиб! Подскажите плз ,какое выражение нужно, чтоб проверить, что в поле ввели именно...

Регулярное выражение для поля ввода числа типа float
Сколько ни гуглил, ответа на свой вопрос не нашел. Надо сделать регулярку для поля ввода, куда...

16
6 / 6 / 2
Регистрация: 17.11.2012
Сообщений: 70
26.01.2016, 19:01 2
/del (
0
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 19:08  [ТС] 3
Hellko,
Регулярное выражение для целого и дробного типа(со знаком)
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
26.01.2016, 19:48 4
/(?=.)([+-]?(\d*)(\.(\d+))+)/?
Дробная часть же обязательна?
0
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 19:56  [ТС] 5
OneMoreGres, не всегда. Число может быть целым или дробным. И если оно дробное, то может иметь целую часть в явном виде(например, 1.43) или не иметь(.042( = 0.042)). Но если оно целое, то дробная часть, очевидно, не нужна.

Добавлено через 5 минут
Кроме того, с какой целью второй '+' в конце? Выражение (\d+) подразумевает, насколько я понимаю, что у нас будет как минимум одна цифра обязательно. Если бы дробная часть была обязательна, то достаточно было бы убрать '?' в конце.
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
26.01.2016, 20:03 6
Лучший ответ Сообщение было отмечено inviter42 как решение

Решение

Пардон, невнимательно прочитал. Тогда как-то так: (?=.)([+-]?(?=[\d\.])(\d*)(\.(\d+))?)
Теперь точно на 1 проблему больше )

+ в конце, чтобы обязательно была . с числом. Но это я пропустил, что еще целые надо.
1
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 20:07  [ТС] 7
OneMoreGres, дык она ж и так обязательно будет, почему бы ей не быть? В смысле, чтобы ввести дробную часть надо поставить точку даже с чисто логической точки зрения.
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
26.01.2016, 20:19 8
Цитата Сообщение от inviter42 Посмотреть сообщение
дык она ж и так обязательно будет, почему бы ей не быть?
Повторюсь.
Цитата Сообщение от OneMoreGres Посмотреть сообщение
Но это я пропустил, что еще целые надо.
Так что тот вариант не актуален.
0
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 20:27  [ТС] 9
OneMoreGres, вроде работает.
Цитата Сообщение от OneMoreGres Посмотреть сообщение
(?=[\d\.])
- а можете объяснить на пальцах что тут происходит? Точнее, как работает [?= __ ]
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
26.01.2016, 20:33 10
(?=regexp) A zero-width positive lookahead assertion. For example, \w+(?=\s) matches a word followed by whitespace, without including whitespace in the MatchResult
Ловит [+-]? только если за ним следует [\d\.] (цифра для целого и дроби или точка для дроби без целой части).

Цитата Сообщение от inviter42 Посмотреть сообщение
вроде работает
С regexp'ами всегда так )
1
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 20:42  [ТС] 11
OneMoreGres, то есть выражение (?=regexp) опирается при поиске соответствия на выражение, которое стоит до него, плюс regexp, но только если они вместе(первое после второго), я правильно понял?
0
72 / 72 / 33
Регистрация: 07.11.2015
Сообщений: 281
26.01.2016, 20:50 12
Да. То, что перед (?=regexp) срабатывает только если за ним следует regexp. Сам regexp не ловится.
0
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 20:52  [ТС] 13
OneMoreGres, отлично, я всё понял. Спасибо за помощь и разъяснения!
0
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
26.01.2016, 21:07 14
Лучший ответ Сообщение было отмечено inviter42 как решение

Решение

\\d*\\.?\\d+
0
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 21:11  [ТС] 15
Amok, вы забыли знак - я указал в тз, чтобы нужны числа со знаком(+ или -). В любом случае ответ был дан OneMoreGres.
0
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
26.01.2016, 21:16 16
inviter42, можно вначале (+|-)? Этот пример есть прямо в документации Qt здесь
0
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
26.01.2016, 21:22  [ТС] 17
Amok, думаю такой вариант тоже возможен. Выглядит правильным, по крайней мере.
0
26.01.2016, 21:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2016, 21:22
Помогаю со студенческими работами здесь

Error C1017: недопустимое константное выражение целого типа
в общем был у меня такой код: ... #if numeric_limits<T>::is_integer typedef long long (Type);...

Какой компонент типа статус бара, подойдет для отображения дробного значения процента?
Подскажите, какой компонент типа статус бара, подойдет для отображения дробного значения процента?...

Сравнение дробного и целого числа
Есть два числа - A = 30 - целое B = 30,75 - дробное Как мне сделать сравнение между ними - ...

Регулярное выражение для поиска
Помогите с регулярными выражениями при парсинге. Скачиваю страницу. <td colspan="1"><font...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru