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.)