¿Cómo componer expresiones regulares con condición en Java?

Aug 30 2020

Condición :

  • los números pueden ser enteros o dobles (8 dígitos en total)
  • los números solo pueden estar separados por espacios (uno o muchos) y comas (0 o uno)
  • las comas solo pueden ser números internos (no puede haber comas al principio y al final de una línea)
  • puede haber espacios al principio de la línea (uno o muchos)
  • puede haber espacios al final de la línea (uno o muchos)

lo que hago :

([\s]*\d+(\.{1}\d+)?[\s\,\s]+){7}(\d+(\.{1}\d+)?[\s]*){1}
                    ^ this   ^

Eso está bien, excepto por una condición.
En esta cadena obtengo true, pero necesito false:

String s1 = " 0 , 4.4 3.2,, 4.1      2 4 1 7.7";

No puedo hacer esto:

Los números pueden estar separados por una sola coma o sin coma, pero en este caso debe haber un espacio (uno o muchos).

Respuestas

1 Gryphon Aug 30 2020 at 06:23

Este es el que se me ocurrió para los espacios/comas (también eliminé algunas partes redundantes):

Pattern.compile("([\\s]*\\d+(\\.\\d+)?(?:\\s*,\\s*|\\s+)){7}(\\d+(\\.\\d+)?[\\s]*)");

Parece hacer lo que quiere con la muestra que proporcionó, al menos. (El uso de {1}generalmente está implícito para los lugares donde lo usó, así que los eliminé)