Kako uporabiti metodo "Split" v Rubyju

Kot morda že veste, strune v Ruby so tisto, kar so znani kot prvovrstni predmeti ki uporabljajo številne metode za poizvedbe in manipulacije.

Eden najbolj osnovnih string manipulacija dejanja je razdelitev niza v več podvrstic. To bi naredili na primer, če imate niz kot"foo, bar, baz" in želite tri strune "foo", "bar" in "baz". The razcepiti metoda razreda String lahko to doseže namesto vas.

Osnovna uporaba "Split"

Najosnovnejša uporaba razcepiti metoda je razdelitev niza na podlagi enega samega znaka ali statičnega zaporedja znakov. Če je prvi argument split, je niz, se znaki v tem nizu uporabljajo kot ločilo ločil niza, medtem ko se v podatkih, ki ločijo vejice, vejica uporablja za ločevanje podatkov.

#! / usr / bin / env rubin
str = "foo, bar, baz"
postavlja str.split (",")
$ ./1.rb
foo
bar
baz

Dodajte prožnost z rednimi izrazi

Obstajajo lažji načini za razmejitev vrvica. Uporaba pravilnega izraza kot ločevalca naredi način razdelitve veliko bolj prilagodljiv.

Spet vzemimo za primer vrvico "foo, bar, baz"

instagram viewer
. Po prvem vejici je presledek, po drugem pa ne. Če se kot ločilo uporablja niz ",", bo na začetku niza "še vedno" preslednik. Če je uporabljen niz "," (s presledkom za vejico), se bo ujemal samo s prvo vejico, saj druga vejica nima presledka. Zelo omejujoče.

Rešitev te težave je, da namesto niza uporabite regularni izraz kot svoj ločevalni argument. Navadni izrazi vam omogočajo, da se ne ujemate samo s statičnimi zaporedji znakov, temveč tudi z nedoločenim številom znakov in izbirnimi znaki.

Pisanje pravilnih izrazov

Ko pišete redni izraz za ločilo, je prvi korak, da z besedami opišete, kaj je ločilo. V tem primeru je stavek "vejica, ki ji lahko sledi en ali več presledkov".

V ta regeks sta dva elementa: vejica in izbirni presledki. Presledki bodo uporabili kvantifikator * (zvezda ali zvezdica), kar pomeni "nič ali več." Vsak element, ki sledi temu, se bo ujemal nič ali večkrat. Na primer, regex /a*/ se ujema z zaporedjem nič ali več znakov 'a'.

#! / usr / bin / env rubin
str = "foo, bar, baz"
postavlja str.split (/, * /)
$ ./2.rb
foo
bar
baz

Omejevanje števila razcepov

Predstavljajte si vrednostni niz, ločen z vejico, kot je "10,20,30, to je poljuben niz". Ta oblika je tri številke, ki jim sledi stolpec za komentar. Ta stolpec za komentar lahko vsebuje poljubno besedilo, vključno z besedilom z vejicami. Preprečiti razcepiti če delimo besedilo tega stolpca, lahko nastavimo največje število stolpcev za razdelitev.

Opomba: To bo delovalo le, če je niz komentarjev z poljubnim besedilom zadnji stolpec tabele.

Če želite omejiti število delitev, se izvede metoda split, posredujte število polj v nizu kot drugi argument metodi split, kot je ta:

#! / usr / bin / env rubin
str = "10,20,30, deset, dvajset in trideset"
postavlja str.split (/, * /, 4)
$ ./3.rb
10
20
30
Deset, dvajset in trideset

Primer bonusa!

Kaj če bi želeli uporabiti razcepiti da bi dobili vse predmete, razen prvega?

Pravzaprav je zelo preprosto:

prvi, * počitek = ex.split (/, /)

Poznavanje omejitev

Metoda delitve ima nekaj precej velikih omejitev.

Vzemimo za primer vrvico '10, 20, "Bob, Eve in Mallory", 30 '. Predvidena sta dve številki, ki ji sledi citirani niz (ki lahko vsebuje vejice) in nato še ena številka. Split ne more pravilno ločiti tega niza na polja.

Da bi to naredili, mora biti strukturni skener državniško, kar pomeni, da si lahko zapomni, ali je znotraj citiranega niza ali ne. Razdelilec optičnega bralnika ni stalen, zato ne more rešiti težav, kot je ta.