Julia: split()-Erweiterung, keep_splitter

Erstellt am 16. Feb. 2017  ·  3Kommentare  ·  Quelle: JuliaLang/julia

Hallo,

Ich möchte eine Feature-Anfrage, an der ich gerade in einem neuen Branch arbeite, für die Funktion split(str, splitter; limit=0, keep=true) vorschlagen.

Ich habe versucht, die Funktion auf diese Weise zu verwenden, und was ich irgendwie erwarte, ist Folgendes:

julia> split("abcabcdabbcd", "b"; keep_splitter = true)
3-element Array{SubString{String},1}:
 "a"   
 "bca" 
 "bcda"
 "b"
 "bcd"

Soll ich weiterarbeiten? Wäre es eine bahnbrechende Veränderung für den Rest des Ökosystems?

Einige Ideen:

  • Wenn das keep_spliter Flag true , dann sollte es keinen Unterschied machen, ob keep (was für leere Ergebnisse steht) true oder false , da es keine leeren Ergebnisse geben würde.
  • Ich bin mir nicht sicher, ob ich ein anderes Flag einfügen soll, um den Splitter nur in die nächste Teilzeichenfolge oder in die vorherige einzuschließen. So funktioniert readlines(file) , nicht wahr? In jedem Element des Arrays haben wir am Ende '\n' .
julia> split("abcabcdabbcd", "b"; keep_splitter = true, prepend = false)
3-element Array{SubString{String},1}:
 "ab"   
 "cab" 
 "cdab"
 "b"
 "cd"

Danke im Voraus!

PS, vielleicht geht das mit einer anderen Funktion, die ich noch nicht kenne

collections design strings

Hilfreichster Kommentar

Dies tritt auch auf, wenn versucht wird, Camel-Case-Strings zu teilen:

foo = "ThisShouldBeSeparate"
split(foo, isuppercase)
5-element Array{SubString{String},1}:
 ""
 "his"
 "hould"
 "e"
 "eparate"

Eine Lösung besteht darin, ein Regex-Trennzeichen zu verwenden: split(foo, r"(?=[A-Z])") aber das ist weit weniger intuitiv (und ich hätte es ohne externe Hilfe nicht gelöst).

Alle 3 Kommentare

Bezogen auf eine mögliche splitlines Funktion (https://github.com/JuliaLang/julia/pull/20390) und auf das neue chomp Argument zu readline / eachline (https://github.com/JuliaLang/julia/pull/19944, https://github.com/JuliaLang/julia/pull/19944).

CC :

Beachten Sie, dass eine andere Betrachtungsweise des aktuellen keep Schlüsselworts tatsächlich besagt, dass Ihr Splitter ein- oder mehrmals wiederholt werden kann, dh implizit als Regex in ein (...)+ Zeichen gepackt wird.

Dies tritt auch auf, wenn versucht wird, Camel-Case-Strings zu teilen:

foo = "ThisShouldBeSeparate"
split(foo, isuppercase)
5-element Array{SubString{String},1}:
 ""
 "his"
 "hould"
 "e"
 "eparate"

Eine Lösung besteht darin, ein Regex-Trennzeichen zu verwenden: split(foo, r"(?=[A-Z])") aber das ist weit weniger intuitiv (und ich hätte es ohne externe Hilfe nicht gelöst).

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

yurivish picture yurivish  ·  3Kommentare

Keno picture Keno  ·  3Kommentare

iamed2 picture iamed2  ·  3Kommentare

musm picture musm  ·  3Kommentare

dpsanders picture dpsanders  ·  3Kommentare