Wie komponiere ich Regex mit Bedingung in Java?

Aug 30 2020

Zustand :

  • Zahlen können entweder int oder double sein (insgesamt 8 Ziffern)
  • Zahlen können nur durch Leerzeichen (eins oder viele) und Kommas (0 oder eins) getrennt werden.
  • Kommas dürfen nur innerhalb von Zahlen stehen (am Anfang und Ende einer Zeile dürfen keine Kommas stehen)
  • Am Anfang der Zeile können Leerzeichen stehen (eines oder mehrere).
  • Am Ende der Zeile können Leerzeichen stehen (eines oder mehrere).

Was ich mache :

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

Das ist bis auf eine Bedingung in Ordnung.
Auf dieser Saite bekomme ich trueaber brauche false:

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

Ich kann das nicht machen:

Zahlen können nur durch ein Komma oder kein Komma getrennt werden. In diesem Fall muss jedoch ein Leerzeichen (ein oder mehrere) vorhanden sein.

Antworten

1 Gryphon Aug 30 2020 at 06:23

Dies ist die, die ich mir für die Leerzeichen / Kommas ausgedacht habe (auch einige redundante Teile wurden entfernt):

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

Scheint zumindest mit dem von Ihnen bereitgestellten Beispiel zu tun, was Sie wollen. (Die Verwendung von {1}ist im Allgemeinen für die Orte impliziert, an denen Sie es verwendet haben, daher habe ich diese entfernt.)