Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > RegExp > Регялрное выражение захватывает не нужные данные


Автор: TetRis 18.05.16, 12:52
Всем привет! Имею следующее выражение для проверки дробного числа:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    /^(?:0|[1-9]\d?)(?:\.\d{1,2})?$/

Нужно чтобы не захватывало 0.0 и 0.00. Пока не могу придумать как реализовать, нужна ваша помощь. Спасибо!

Автор: AVA12 18.05.16, 15:07
Цитата
Нужно чтобы не захватывало 0.0 и 0.00.

Вроде бы, в регвыре для разбора email есть нужный кусок.

Автор: xJI0pLLuaH 13.06.16, 21:47
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    (?:\d*[1-9]\d*\.\d{1,2}|0+\.(?:0[1-9]|[1-9]\d?))

логика:
либо
{,} цифр, 1 из которых (любая) не ноль - до точки, и
1-2 цифры (любые) после точки
либо
{1,} нулей до точки, и
0 и не-ноль после точки, либо (не-ноль и (любая цифра, включая ноль, или пустота)) после точки

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    >>> re.findall(r'\b(?:\d*[1-9]\d*\.\d{1,2}|0+\.(?:0[1-9]|[1-9]\d?))\b',
    ... ' 1.2 10.2 10.02 10.0 0.10 0.0 0.00 0.05 00.00 01.02 1000.23 00.0 123.45 00.12')
    ['1.2', '10.2', '10.02', '10.0', '0.10', '0.05', '01.02', '1000.23', '123.45', '00.12']


Добавлено
Цитата AVA12 @
Вроде бы, в регвыре для разбора email есть нужный кусок.

оО это шутка такая?
проще самому написать чем читать ЭТО.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)