4 votes

Quelle est une bonne expression régulière pour les nombres réels en Java ?

Quelle est une bonne expression régulière pour les nombres réels en Java ?

J'ai créé la regex ([-]?[\\d]*\\.[\\d]*) et l'a testé par rapport aux résultats attendus suivants :

in                  out        works?
--------------------------------------
qwerty34.34abcd     34.34       yes
qwe-34.34.34abcd    -34.34      no
+17.-9abc           17.0        yes
-.abc0              0.0         no

Je dois sortir exactement ce que la colonne(out). Veuillez fournir une expression rationnelle qui passe tous ces tests.

7voto

Ant P Points 12459

Essayez ce qui suit :

((\+|-)?([0-9]+)(\.[0-9]+)?)|((\+|-)?\.?[0-9]+)

Cela correspondra aux nombres réels, y compris les entiers, avec ou sans signe (et avec ou sans chiffre avant la virgule).

4voto

Eric Jablow Points 4385

L'expression régulière doit satisfaire à ces exigences :

  1. Il peut y avoir un signe facultatif. Essayez [+-]? .
  2. Il peut y avoir 0 ou plusieurs chiffres facultatifs. Essayez [0-9]* .
  3. Il peut y avoir un point décimal. Essayez [.] pour éviter les backslashs.
  4. Il peut y avoir 0 ou plusieurs chiffres après le point décimal. Essayez [0-9]* .
  5. Au moins un des numéros 2 et 4 a un chiffre. On utiliserait donc [0-9]+ et il peut utiliser l'alternance.

Est-ce que ce modèle fonctionne : [+-]?([0-9]*[.]?[0-9]+|[0-9]+[.]?[0-9]*) ? Je m'inquiète cependant d'un retour en arrière catastrophique.

2voto

0x90 Points 8193
^[+-]?(?:\d+\.?\d*|\d*\.\d+)$
  • ? c'est pour faire + o - optionnels
  • ?: est pour le groupe non capturant
  • \ est un caractère d'échappement

2voto

android developer Points 20939

Et la suivante ?

^-?(([1-9][0-9]*)|(0))(?:\.[0-9]+)?$

ou le suivant si vous voulez autoriser le signe "+" :

^(-|\+)?(([1-9][0-9]*)|(0))(?:\.[0-9]+)?$

BTW, voici un beau site pour tester et partager les regexp.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X