Kako koristiti string supstituciju u Ruby

Dijeljenje niza samo je jedan način manipulacije nizom podataka. Također možete izvršiti zamjene kako biste jedan dio niza zamijenili drugim. Na primjer, u primjeru niza (foo, bar, baz) zamjena "foo" s "boo" u dovela bi do "boo, bar, baz." To možete učiniti i mnogo više stvari pomoću pod i gsub metoda u klasi stringova.

Mnoge mogućnosti za zamjenu Ruby

Metode supstitucije dolaze u dvije varijante. pod metoda je najosnovnija od dvije i dolazi s najmanjim brojem iznenađenja. Jednostavno zamjenjuje prvu instancu određenog uzorka zamjenom.

Dok pod zamjenjuje samo prvu instancu, gsub metoda zamjenjuje svaku instancu uzorka zamjenom. Pored toga, oboje pod i gsub imati pod! i gsub! kolege. Upamtite, metode u Rubin taj kraj u uskličniku mijenja varijablu umjesto da vraća modificiranu kopiju.

Pretražite i zamijenite

Najosnovnija uporaba metoda zamjene je zamjena jednog statičkog niza pretraživanja jednim statičkim zamjenskim nizom. U gornjem primjeru, "foo" je zamijenjen s "boo". To se može učiniti za prvu pojavu "foo" u nizu koristeći

instagram viewer
pod metodom ili sa svim pojavama "foo" koristeći gsub metoda.

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

Fleksibilno pretraživanje

Traženje statičkih nizova može ići samo tako daleko. Na kraju ćete naići na slučajeve u kojima je podskup žice ili će se podudarati žice s opcijskim komponentama. Metode supstitucije mogu, naravno, odgovarati regularnim izrazima umjesto statičkih nizova. To im omogućuje da budu mnogo fleksibilniji i odgovaraju praktički bilo kojem tekstu koji možete zamisliti.

Ovaj je primjer malo realniji svijet. Zamislite skup vrijednosti odvojenih zarezima. Te se vrijednosti ubacuju u tabelarni program nad kojim nemate kontrolu (zatvoren izvor). Program koji generira ove vrijednosti je i zatvoreni izvor, ali šalje neke loše oblikovane podatke. Neka polja imaju razmake nakon zareza i to uzrokuje pucanje tabulatornog programa.

Jedno moguće rješenje je pisanje Ruby programa koji djeluje kao "ljepilo" ili filtar, između dva programa. Ovaj Ruby program popravit će sve probleme u oblikovanju podataka tako da tabulator može raditi svoj posao. Da biste to učinili, prilično je jednostavno: zamijenite zarez koji slijedi određeni broj razmaka samo zarezom.

#! / usr / bin / env rubin
STDIN.each do | l |
l.gsub! (/, + /, ",")
stavlja l
kraj
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 zamjene

Zamislite ovu situaciju. Pored manjeg oblikovanja greške, program koji proizvodi podatke proizvodi podatke o broju u znanstvene zapise. Program tabulator to ne razumije pa ćete ga morati zamijeniti. Očito, jednostavan gsub ovdje neće raditi jer će zamjena biti različita svaki put kad se zamjena izvrši.

Srećom, metode supstitucije mogu uzeti blok za argumente zamjene. Pri svakom pronalaženju niza pretraživanja, tekst koji se podudara s pretraživačkim nizom (ili regexom) šalje se u ovaj blok. Vrijednost dobijena blokom koristi se kao zamjenski niz. U ovom primjeru, broj plutajuće točke u obliku znanstvene notacije (kao što je 1.232e4) pretvara se u normalan broj s decimalnom točkom. Niz se pretvara u broj sa to_f, tada se broj formatira pomoću niza formata.

#! / usr / bin / env rubin
STDIN.each do | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) do | n |
"% .3f"% n.to_f
kraj
l.gsub! (/, + /, ",")
stavlja l
kraj
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

Niste upoznati s pravilnim izrazima?

Idemo korak unatrag i pogledamo to pravilni izraz. Izgleda sumorno i komplicirano, ali vrlo je jednostavno. Ako niste upoznati s pravilnim izrazima, oni mogu biti prilično zagonetni. Međutim, nakon što ih upoznate, izravne su i prirodne metode opisivanja teksta. Postoji nekoliko elemenata, a nekoliko elemenata ima kvantifikatore.

Glavni je element ovdje \ d klasa likova. To će odgovarati bilo kojoj znamenci, znakovima 0 do 9. Kvantifikator + koristi se s znamenkom razreda znakova da označava da se jedna ili više od tih znamenki moraju podudarati u redu. Imate tri grupe znamenki, dvije odvojene znakom ".", a druga razdvojena slovom"e"(za eksponent).

Drugi element koji pluta oko je znak minus, koji koristi znak "?"kvantifikator. To znači "nula ili jedan" ovih elemenata. Dakle, ukratko, mogu postojati negativni znakovi na početku broja ili eksponenta.

Druga dva elementa su. (razdoblje) lik i e lik. Kombinirajte sve to i dobit ćete redoviti izraz (ili skup pravila za podudaranje teksta) koji odgovara brojevima u znanstvenom obliku (kao što je 12.34e56).

instagram story viewer