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)
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı