Como compor regex com condição em Java?

Aug 30 2020

Condição :

  • os números podem ser int ou double (total de 8 dígitos)
  • os números só podem ser separados por espaços (um ou muitos) e vírgulas (0 ou um)
  • vírgulas só podem estar dentro de números (não pode haver vírgulas no início e no final de uma linha)
  • pode haver espaços no início da linha (um ou muitos)
  • pode haver espaços no final da linha (um ou muitos)

O que eu faço :

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

Tudo bem, exceto por uma condição.
Nesta string eu recebo true, mas preciso false:

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

Eu não posso fazer isso:

Os números podem ser separados por apenas uma vírgula ou nenhuma vírgula, mas neste caso deve haver um espaço (um ou muitos).

Respostas

1 Gryphon Aug 30 2020 at 06:23

Este é o que eu criei para os espaços/vírgulas (também removi algumas partes redundantes):

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

Parece fazer o que você quer com a amostra que você forneceu, pelo menos. (O uso de {1}geralmente está implícito para os lugares em que você o usou, então eu os removi)