Julia: рд╡рд┐рднрд╛рдЬрди () рд╡реГрджреНрдзрд┐, Keep_splitter

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдлрд╝рд░ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JuliaLang/julia

рдирдорд╕реНрддреЗ,

рдореИрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдЕрдм split(str, splitter; limit=0, keep=true) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдпрд╛, рдФрд░ рдЬреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ,

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

рдХреНрдпрд╛ рдореБрдЭреЗ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдпрд╣ рдмрд╛рдХреА рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛?

рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

  • рдпрджрд┐ keep_spliter рдзреНрд╡рдЬ true , рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ keep (рдЬреЛ рдЦрд╛рд▓реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ), true рдпрд╛ false , рдХреНрдпреЛрдВрдХрд┐, рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЦрд╛рд▓реА рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
  • рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдкреНрд▓рд┐рдЯрд░ рдХреЛ рдЕрдЧрд▓реЗ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рдзреНрд╡рдЬ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рддрд░рд╣ readlines(file) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛? рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдореЗрдВ рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ '\n' ред
julia> split("abcabcdabbcd", "b"; keep_splitter = true, prepend = false)
3-element Array{SubString{String},1}:
 "ab"   
 "cab" 
 "cdab"
 "b"
 "cd"

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

рдкреАрдПрд╕, рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддрд╛

collections design strings

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдКрдВрдЯ рдХреЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рднреА рдлрд╕рд▓ рд╣реЛрддрд╛ рд╣реИ:

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

рдПрдХ рд╕рдорд╛рдзрд╛рди рд░реЗрдЧреЗрдХреНрд╕ рдбрд┐рд▓реАрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ: split(foo, r"(?=[A-Z])") рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╣реИ (рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрд╛рд╣рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛)ред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕рдВрднрд╛рд╡рд┐рдд splitlines рдлрд╝рдВрдХреНрд╢рди (https://github.com/JuliaLang/julia/pull/20390) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, рдФрд░ readline / eachline рдХреЗ рдирдП chomp рддрд░реНрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд eachline (https://github.com/JuliaLang/julia/pull/19944, https://github.com/JuliaLang/julia/pull/19944)ред

рд╕реАрд╕реА: @mpastell

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди keep рдХреАрд╡рд░реНрдб рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрдкреНрд▓рд┐рдЯрд░ рдХреЛ 1 рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛рдиреА рдЗрд╕реЗ (...)+ рдореЗрдВ рд░реЗрдЧреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рд▓рдкреЗрдЯрдирд╛ред

рдКрдВрдЯ рдХреЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рднреА рдлрд╕рд▓ рд╣реЛрддрд╛ рд╣реИ:

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

рдПрдХ рд╕рдорд╛рдзрд╛рди рд░реЗрдЧреЗрдХреНрд╕ рдбрд┐рд▓реАрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ: split(foo, r"(?=[A-Z])") рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд╣реИ (рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрд╛рд╣рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕