Wie teilt man einen string anhand eines Musters mit regex
Ich habe Probleme beim splitting-string basierend auf regex.
String str = "1=(1-2,3-4),2=2,3=3,4=4";
Pattern commaPattern = Pattern.compile("\\([0-9-]+,[0-9-]+\\)|(,)") ;
String[] arr = commaPattern.split(str);
for (String s : arr)
{
System.out.println(s);
}
Erwartete Ausgabe,
1=(1-2,3-4)
2=2
3=3
4=4
Tatsächliche Ausgabe,
1=
2=2
3=3
4=4
Regex ist nicht zu lösen es für Sie. Sie benötigen einen parser. Sie benötigen einen parser.
es gibt keine Notwendigkeit der parser für so ein einfaches problem..parser wäre ein overkill
es gibt keine Notwendigkeit der parser für so ein einfaches problem..parser wäre ein overkill
InformationsquelleAutor prasanth | 2013-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese regex würde split als erforderlich
Können Sie erklären, es ein bisschen? Zum Beispiel, warum
\\)
ist, als ein Teil der Quantoren statt einem Charakter? Warum,?!([^()]*\\))
funktioniert nicht? Danke!Von was ich mich erinnern kann, die
,
wird abgestimmt über lookahead. Durch die lookahead-Funktion, die regex-engine nicht verbrauchen Zeichen, die wie eine Boolesche Bedingung, so dass anstelle des Konsums von Zeichen und voran, es wird überprüft, ob die Bedingung wahr ist oder nicht..Dies ist erforderlich, weil, wenn Sie versuchen zu splitten, ohne lookaheads, es wird auch aufgeteilt auf die Inhalte abgestimmt, dann werden Sie anderen ,`InformationsquelleAutor Anirudha
Dies ist nicht gut geeignet für einen
split(...)
. Betrachten Sie das Scannen durch die Eingangs-undmatch
ing statt:welche drucken würde:
InformationsquelleAutor Bart Kiers
Werden kann, müssen Sie einige look-ahead-Mechanismus hier. Wie ich sehe, hast du versucht, um es zu teilen auf Komma, das nicht in der Klammer. Aber Ihre regulären Ausdrücke sagt:
So dass Ihr String wird aufgesplittet in 4 Orten
1) (1-2,3-4)
2-4) Komma
InformationsquelleAutor Hurda
sollte
commaPattern
ist nicht eine regex-string. Selbst wenn Sie passieren string wäre dies nicht lösen das problem mit regulären Ausdrücken.Nicht nur sind yoi falsch, das beantwortet nicht seine Frage.
InformationsquelleAutor Achintya Jha