Как мне написать регулярное выражение для записи десятичных чисел?

#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: