如何在Ruby中使用字符串替換

拆分字符串只是操縱字符串?dāng)?shù)據(jù)的一種方式。您還可以進(jìn)行替換以用另一個(gè)字符串替換字符串的一部分。例如,在一個(gè)示例字符串(foo,bar,baz)中,用"foo"with"boo"in將產(chǎn)生"boo,bar,baz。"您可以使用字符串類中的subgsub方法執(zhí)行此操作和更多操作。

紅寶石替代品的許多選擇

替代方法有兩個(gè)品種。sub方法是兩者中最基本的方法,并且具有最少數(shù)量的驚喜。它只是用替換替換指定模式的第一個(gè)實(shí)例。

sub僅替換第一個(gè)實(shí)例,gsub方法使用替換替換替換模式的每個(gè)實(shí)例。此外,subgsub都具有sub!gsub!同行。請(qǐng)記住,以感嘆號(hào)結(jié)尾的Ruby中的方法會(huì)改變變量,而不是返回修改后的副本。

搜索并替換

替換方法最基本的用法是用一個(gè)靜態(tài)替換字符串替換一個(gè)靜態(tài)搜索字符串。在上面的例子中,"foo"被替換為"boo。"這可以用于第一次出現(xiàn)"foo"在字符串中使用sub方法或所有出現(xiàn)"foo"使用gsub方法。

#!/usr/bin/env ruby
a="foo,bar,baz"
b=a.sub("foo","boo")
放置b

$./1.rb
foo,bar,baz
gsub$./1.rb
boo,bar,baz

靈活搜索

搜索靜態(tài)字符串只能到目前為止。最終,您'將運(yùn)行需要匹配具有可選組件的字符串或字符串子集的情況。當(dāng)然,替換方法可以匹配正則表達(dá)式而不是靜態(tài)字符串。這使它們更加靈活,幾乎可以匹配您可以想到的任何文本。

這個(gè)例子更真實(shí)一些。想象一組逗號(hào)分隔值。這些值被饋送到您無(wú)法控制的制表程序(封閉源)。生成這些值的程序也是封閉源代碼,但它輸出一些格式錯(cuò)誤的數(shù)據(jù)。有些字段在逗號(hào)后面有空格,這導(dǎo)致制表程序中斷。

一種可能的解決方案是在兩個(gè)程序之間編寫一個(gè)紅寶石程序來(lái)充當(dāng)"膠水,"或過(guò)濾器。這個(gè)Ruby程序?qū)⒔鉀Q數(shù)據(jù)格式中的任何問(wèn)題,以便制表器可以完成其工作。要做到這一點(diǎn),它'非常簡(jiǎn)單:用逗號(hào)替換逗號(hào),后面跟著多個(gè)空格。

#!/usr/bin/env ruby
STDIN.each做| l |
l.gsub!(/,+/,",")
將l
結(jié)束

gsub$catdata.txt
10,20,30
12.8,10.4,11
gsub$catdata.txt|./2.rb
10,20,30
12.8,10.4,11

教育_1

靈活替換

現(xiàn)在想象一下這種情況。除了輕微的格式錯(cuò)誤外,生成數(shù)據(jù)的程序還會(huì)以科學(xué)符號(hào)生成數(shù)字?jǐn)?shù)據(jù)。制表程序不理解這一點(diǎn),所以你必須替換它。顯然,一個(gè)簡(jiǎn)單的gsub會(huì)在這里得到'因?yàn)槊看胃鼡Q都會(huì)更換。

幸運(yùn)的是,替換方法可以阻止替換參數(shù)。每次找到搜索字符串時(shí),與搜索字符串(或regex)匹配的文本都會(huì)傳遞到此塊。塊產(chǎn)生的值用作替換字符串。在這個(gè)例子中,科學(xué)符號(hào)形式的浮動(dòng)點(diǎn)編號(hào)(例如1.232e4)被轉(zhuǎn)換為小數(shù)點(diǎn)的正常編號(hào)。字符串轉(zhuǎn)換為到?f

數(shù)字06>,然后使用格式字符串格式化編號(hào)。

#!/usr/bin/env ruby
STDIN.each做| l |
l.gsub!( /-?\d+\.d+e-?\d+/)做| n |
"%.3f"%n.to Uf
end
l.gsub!(/,+/,",")
將l
結(jié)束

gsub$catfloata.txt
2.215e-1,54,11
3.15668e6,21,7
gsub$catfloata.txt|./3.rb
0.222,54,11
3156680保健常識(shí)健德堂.000,21,7

不熟悉正則表達(dá)式?

讓's退后一步,看看那個(gè)正則表達(dá)式。它看起來(lái)神秘而復(fù)雜,但它非常簡(jiǎn)單。如果您'不熟悉正則表達(dá)式,它們可能非常神秘。但是,一旦您熟悉它們,它們就會(huì)成為描述文本的簡(jiǎn)單而自然的方法。有許多元素,其中一些元素有量詞。

這里的主要元素是\ d字符類。這將匹配任何數(shù)字,字符0到9。量詞+與digit character類一起使用,表示這些數(shù)字中的一個(gè)或多個(gè)應(yīng)該連續(xù)匹配。您有三組數(shù)字,兩組用a"。"另一組用字母"分隔;e"(用于指數(shù))。

浮動(dòng)的第二個(gè)元素是負(fù)字符,它使用"?"量詞。這意味著這些元素中的"零或一"。因此,簡(jiǎn)而言之,數(shù)字或指數(shù)開頭可能有也可能沒有負(fù)號(hào)。

另外兩個(gè)要素是(句點(diǎn))字符和e字符。將所有這些結(jié)合起來(lái),得到一個(gè)與科學(xué)形式的數(shù)字匹配的正則表達(dá)式(或一組匹配文本的規(guī)則)(例如12.34e56)。