Kako uporabljati string substitucijo v Rubyju

Razdelitev niza je samo en način za manipulacijo z nizkimi podatki. Prav tako lahko zamenjate en del niza z drugim. Na primer, v primeru niza (foo, bar, baz) bi zamenjava "foo" z "boo" v prinesla "boo, bar, baz." To lahko storite s številnimi stvarmi pod in gsub metoda v razredu niza.

Veliko možnosti za zamenjavo Ruby

Nadomestne metode imajo dve vrsti. The pod metoda je najosnovnejša od obeh in prihaja z najmanjšim številom presenečenj. Preprosto nadomesti prvi primer določenega vzorca z nadomestnim.

Ker pod nadomesti samo prvi primerek, gsub metoda nadomešča vsak primerek vzorca z nadomestkom. Poleg tega oboje pod in gsub so sub! in gsub! kolegi. Ne pozabite, metode v Ruby ta konec v klicaju spremeni spremenljivko namesto, da vrne spremenjeno kopijo.

Iščite in zamenjajte

Najbolj osnovna uporaba nadomestnih metod je zamenjava enega statičnega iskalnega niza z enim statičnim nadomestnim nizom. V zgornjem primeru je bil "foo" nadomeščen z "boo." To je mogoče storiti za prvi pojav "foo" v nizu z uporabo pod metoda ali z vsemi pojavi "foo" z uporabo gsub metoda.

instagram viewer
#! / usr / bin / env rubin
a = "foo, bar, baz"
b = a.sub ("foo", "boo")
postavlja b
$ ./1.rb
foo, bar, baz
gsub $ ./1.rb
boo, bar, baz

Prilagodljivo iskanje

Iskanje statičnih nizov lahko gre samo tako daleč. Sčasoma boste naleteli na primere, kjer je podmnožica strune ali strune z izbirnimi komponentami se bodo morale ujemati. Metode substitucije se lahko seveda ujemajo z regularnimi izrazi namesto s statičnimi nizi. To jim omogoča, da so veliko bolj prilagodljivi in ​​se ujemajo s praktično vsakim besedilom, ki se mu lahko zamislite.

Ta primer je malo bolj dejanski svet. Predstavljajte si nabor vrednosti, ločenih z vejicami. Te vrednosti se vnesejo v tabelarni program, nad katerim nimate nadzora (zaprto) vir). Program, ki ustvarja te vrednosti, je tudi zaprt vir, vendar oddaja nekaj slabo oblikovanih podatkov. Nekatera polja imajo presledke za vejico, zaradi česar se program tabulatorja zlomi.

Ena od možnih rešitev je, da napišete program Ruby, ki deluje kot "lepilo" ali filter med obema programoma. Ta program Ruby bo odpravil vse težave pri oblikovanju podatkov, tako da lahko tabulator opravi svoje delo. Če želite to narediti, je preprosto: zamenjajte vejico in številna presledka z vejico.

#! / usr / bin / env rubin
STDIN.each do | l |
l.gsub! (/, + /, ",")
postavi l
konec
gsub $ cat data.txt
10, 20, 30
12.8, 10.4,11
gsub $ cat data.txt | ./2.rb
10,20,30
12.8,10.4,11

Fleksibilne zamenjave

Zdaj si predstavljajte to situacijo. Poleg manjšega oblikovanja napake, program, ki proizvaja podatke, ustvari podatke o številu v znanstvenih zapisih. Program tabulatorja tega ne razume, zato ga boste morali zamenjati. Očitno preprost gsub tukaj ne bo storil, ker bo zamenjava drugačna vsakič, ko bo zamenjava opravljena.

Na srečo lahko metode substitucije prevzamejo blok za argumente zamenjave. Vsakokrat, ko najdete iskalni niz, se besedilo, ki se ujema z iskalnim nizom (ali regex), prenese v ta blok. Vrednost, ki jo ustvari blok, se uporablja kot nadomestni niz. V tem primeru številka s plavajočo vejico v obliki znanstvenih zapisov (npr 1.232e4) se pretvori v normalno število z decimalno vejico. Niz se pretvori v številko s do_f, potem se številka oblikuje z oblikovalnim nizom.

#! / usr / bin / env rubin
STDIN.each do | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) do | n |
"% .3f"% n.to_f
konec
l.gsub! (/, + /, ",")
postavi l
konec
gsub $ cat floatdata.txt
2.215e-1, 54, 11
3.15668e6, 21, 7
gsub $ cat floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7

Ne poznate rednih izrazov?

Naredimo korak nazaj in si oglejmo to vsakdanje izražanje. Izgleda zoprno in zapleteno, vendar je zelo preprosto. Če ne poznate rednih izrazov, so lahko precej zoprni. Ko pa se seznanite z njimi, so preproste in naravne metode opisovanja besedila. Obstaja več elementov, več elementov pa ima kvantifikatorje.

Glavni element tukaj je \ d razred znakov. To se ujema s katero koli števko, znaki od 0 do 9. Kvantifikator + se uporablja s številskim razredom znakov, da pomeni, da se mora ena ali več teh številk ujemati v vrsti. Na voljo imate tri skupine številk, od katerih sta dve ločeni z »."in drugo ločeno s črko"e"(za eksponent).

Drugi element, ki lebdi okoli, je znak minus, ki uporablja znak "?"kvantifikator. To pomeni "nič ali eno" teh elementov. Torej, skratka, na začetku številke ali eksponenta lahko obstajajo negativni znaki ali ne.

Druga dva elementa sta. (obdobje) in znak e lik. Vse to združite in dobite navaden izraz (ali niz pravil za ujemanje besedila), ki se ujema s številkami v znanstveni obliki (npr. 12.34e56).

instagram story viewer