Hallo
angenommen man hat folgenden String:
"abc\~def~ghi"
Ziel ist es, den String durch das Zeichen "~" zu trennen, allerdings nur dann wenn vor dem Zeichen kein Escapezeichen steht. Die split[] Methode von java erlaubt eine reg. Expression anzugeben und mein erster Versuch war:
split("[^\\\\]~")
Ist natürlich falsch weil auch das vorherige Zeichen abgeschnitten wird. Kann mir da jemand weiterhelfen?
Sebastian
spezielle Reg. Expression / split[]
-
lordseppo13 -
9. April 2008 um 06:46 -
Unerledigt
-
-
Schaut für mich so aus, als ob das mit split nicht gehen würde. Falls es wirklich nur um diese eine spezielle Anwendung geht, würde ich wohl einfach mit "~" splitten und gegebenenfalls wieder Strings zusammenpasten. Das dürfte recht schnell hingeschrieben sein.
Wenn doch mehr nötig ist oder das effizienter sein muß, brauchst du was mächtigeres.
-
Zitat
Ziel ist es, den String durch das Zeichen "~" zu trennen, allerdings nur dann wenn vor dem Zeichen kein Escapezeichen steht.
Du musst eigentlich nur die Anzahl der \ davor zählen. Es könnte ja auch \\~ stehen -- somit wäre die Tilde nicht mehr escaped.
Bei gerader Anzahl: nicht splitten; bei ungerader: splitten. -
Kniet nieder vor dem zero-width negative lookbehind operator ?<! :cool: :
PHP
Alles anzeigenpackage at.bookworm.test.tuwien; import static org.junit.Assert.*; import org.junit.Test; public class RegexLookbehindTest { @Test public void doNotSplitAtEscape() { String str = "abc\\~def~ghi"; String[] results = str.split("(?<![^\\\\]\\\\)~"); assertEquals(2, results.length); assertEquals("abc\\~def", results[0]); assertEquals("ghi", results[1]); } @Test public void doSplitAtDoubleEscape() { String str = "abc\\\\~def~ghi"; String[] results = str.split("(?<![^\\\\]\\\\)~"); assertEquals(3, results.length); assertEquals("abc\\\\", results[0]); assertEquals("def", results[1]); assertEquals("ghi", results[2]); } }
-
hmmm ... mit dem split() fällt mir das fürs Erste auch nicht eleganter ein, als dass man die "\~" an jedes Element < n wieder hinzufügen müsste ...
Vielleicht willst Du Dir aber mal den StringTokenizer anschauen ... ?
P.S.: Lösung oberhalb scheint eleganter zu sein ...
-
Maximilian Rupp
27. Dezember 2024 um 12:04 Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!