Regex, чтобы соответствовать этим правилам числа - PullRequest
3 голосов
/ 24 февраля 2012

В Java я сейчас использую

str.matches("\\d")

, но соответствует только одному номеру.

Мне нужно сопоставить целые и двойные числа, например :

"1"
"1337"
".1"
"13.7"

Любая помощь будет потрясающей.

Ответы [ 6 ]

5 голосов
/ 24 февраля 2012

Я думаю, что это регулярное выражение может помочь вам

\\d*\\.?\\d+
5 голосов
/ 24 февраля 2012

Вы можете попробовать это регулярное выражение:

 ^(\d+(\.\d+)?|\.\d+)$
2 голосов
/ 24 февраля 2012
((\+|-)?(\d+(\.\d+)?|\.\d+))

Это будет соответствовать положительным и отрицательным целым числам, двойные числа, начинающиеся с цифры, и двойные числа, начинающиеся с точки

1 голос
/ 24 февраля 2012

Это будет соответствовать любому действительному числу, которое распознает компилятор Java. Для этого он также обрабатывает такие вещи, как числа со знаком и экспоненты. Это в режиме Pattern.COMMENTS, потому что я думаю, что все остальное варварское.

(?xi)                      # the /i is for the exponent
(?:[+-]?)                  # the sign is optional
(?:(?=[.]?[0123456789])
   (?:[0123456789]*)
   (?:(?:[.])
      (?:[0123456789]{0,})
   ) ?
)
# this is where the exponent starts, if you want it
(?:(?:[E])
   (?:(?:[+-]?)
      (?:[0123456789]+)
   ) 
   |
)
1 голос
/ 24 февраля 2012

Я думаю, что это более аккуратно, чем другие предложения, но все же делать то же самое.

(\\d+)?(\\.)?\\d+

0 голосов
/ 24 февраля 2012

Существует довольно обширный урок о регулярных выражениях в Учебниках Java .

Для получения информации о сопоставлении нескольких символов вы должны прочитать раздел о квантификаторах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...