#regex
#регулярное выражение
Вопрос:
Мне нужно написать регулярное выражение, которое будет фиксировать все следующие числа из образца текста:
2.5
5
0.2
.5
Предполагая, что оно не будет содержать более 2 цифр по обе стороны от десятичной точки, какое регулярное выражение мне использовать?
Спасибо.
Ответ №1:
Это должно сработать.
(d*.?d )
Это означает
(
начать группу захватаd*
любая цифра равна нулю или более раз.?
период равен нулю или один раз (т. е. это необязательно)d
любая цифра один или более раз)
завершить группу захвата
Оно будет соответствовать всем указанным вами числам и записывать их в $1
.
Комментарии:
1. Вы можете убрать круглые скобки и использовать
$0
, чтобы получить совпадающее содержимое всего регулярного выражения.2. Это будет соответствовать
123.456
, но оператору требуется не более 2 цифр по обе стороны от десятичной точки.3. @Tim спасибо за совет. я забыл об
$0
, поскольку я склонен обнаруживать, что обычно я хочу записывать только часть регулярного выражения.4. @M42 Полагаю, я прочитал это иначе, чем вы. Я прочитал это так, что на входе никогда не будет более 2 цифр по обе стороны от десятичной дроби. Я добавлю второе регулярное выражение для уточнения.
5. @Jeff: Вы, вероятно, правы, поскольку OP принял ответ 🙂
Ответ №2:
Это регулярное выражение выполнит задание (т. Е. не более 2 цифр по обе стороны от десятичной точки)
^(?:d{0,2}.d{1,2})$|^d{1,2}$
объяснение:
^ # Begining of the string
(?: # begining of NON capture group
d{0,2} # matches 0,1 or 2 digits
. # decimal point
d{1,2} # 1 or 2 digits
) # end of non capture group
$ # end of string
| # OR
^ # Begining of the string
d{1,2} # 1 or 2 digits
$ # end of string
Это регулярное выражение будет соответствовать:
2.5, 5, 0.2, .5
но не:
123.456, 256
Ответ №3:
Взгляните на это: http://www.regular-expressions.info/floatingpoint.html