Comment composer une regex avec une condition en Java?
Aug 30 2020
Condition :
- les nombres peuvent être entiers ou doubles (total de 8 chiffres)
- les nombres ne peuvent être séparés que par des espaces (un ou plusieurs) et des virgules (0 ou un)
- les virgules ne peuvent être que des nombres intérieurs (il ne peut y avoir aucune virgule au début et à la fin d'une ligne)
- il peut y avoir des espaces au début de la ligne (un ou plusieurs)
- il peut y avoir des espaces à la fin de la ligne (un ou plusieurs)
Ce que je fais :
([\s]*\d+(\.{1}\d+)?[\s\,\s]+){7}(\d+(\.{1}\d+)?[\s]*){1}
^ this ^
Ce n'est pas grave, sauf pour une condition.
Sur cette chaîne true, j'obtiens , mais j'ai besoin false:
String s1 = " 0 , 4.4 3.2,, 4.1 2 4 1 7.7";
Je ne peux pas faire ça:
Les nombres peuvent être séparés par une seule virgule ou pas de virgule, mais dans ce cas, il doit y avoir un espace (un ou plusieurs).
Réponses
1 Gryphon Aug 30 2020 at 06:23
C'est celui que j'ai proposé pour les espaces / virgules (également supprimé certaines parties redondantes):
Pattern.compile("([\\s]*\\d+(\\.\\d+)?(?:\\s*,\\s*|\\s+)){7}(\\d+(\\.\\d+)?[\\s]*)");
Semble faire ce que vous voulez avec l'échantillon que vous avez fourni, au moins. (L'utilisation de {1}est généralement implicite pour les endroits où vous l'avez utilisée, donc je les ai supprimées)