Java'da koşullu normal ifade nasıl oluşturulur?

Aug 30 2020

Durum :

  • sayılar int veya double (toplam 8 hane) olabilir
  • sayılar yalnızca boşluk (bir veya birçok) ve virgül (0 veya bir) ile ayrılabilir
  • virgüller yalnızca sayıların içinde olabilir (bir satırın başında ve sonunda virgül olamaz)
  • satırın başında boşluklar olabilir (bir veya daha fazla)
  • satırın sonunda boşluk olabilir (bir veya daha fazla)

Ne yapıyorum :

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

Bir koşul dışında sorun değil.
Bu dizede anlıyorum true, ama ihtiyacım var false:

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

Bunu yapamam:

Sayılar yalnızca bir virgülle veya virgül olmadan ayrılabilir, ancak bu durumda bir boşluk (bir veya daha fazla) olmalıdır.

Yanıtlar

1 Gryphon Aug 30 2020 at 06:23

Boşluklar / virgüller için bulduğum şey budur (ayrıca bazı gereksiz kısımları da kaldırmıştır):

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

En azından verdiğin örnekle istediğini yapıyor gibi görünüyor. (Genellikle kullandığınız {1}yerler için kullanımı ima edilir, bu yüzden onları kaldırdım)