2013-06-20 105 views
0

的部分我有這個字符串紅寶石更換字符串

s = "03:23 PM on 09/04/12" 

我想帶出「開」並且只是一個空間「 」代替它。我認爲字符串的gsub方法和正則表達式是最好的解決方案。我只是不知道爲什麼這不會工作。

s ="03:23 PM on 09/04/12" 
s.gsub(/ on /, ' ') 
puts s 
#=> "03:23 PM on 09/04/12" 
+1

'gsub'返回字符串改變,'GSUB!'會產生變異到位的字符串。 – thomasfedb

回答

3

的字符串的方法gsub返回修改後的字符串,獨自離開對象的字符串。如果你想修改對象,那麼你必須使用gsub!

此外,如果您只想更改一次匹配,那麼sub可能是您最好的選擇。

所以

s = "03:23 PM on 09/04/12" 

s = s.sub(' on ', ' ') 

s.sub!(' on', ' ') 
+1

'sub',因爲它改變了第一次出現,在處理長字符串時比'gsub'快得多。 'sub'會立即退出,'gsub'會掃描剩餘的字符串以替換添加目標。 –

+1

@theTinMan:公平的說,這個優點不太可能是重要的,特別是對於二十個字符的字符串。 – Borodin

+0

正如我所說,特別是在處理很多字符串時,它會影響長字符串。 –

2

工作正常,我......也許你想用gsub!

>> s ="03:23 PM on 09/04/12" 
=> "03:23 PM on 09/04/12" 
>> s.gsub(/ on /, ' ') 
=> "03:23 PM 09/04/12" 
>> s.gsub!(/ on /, ' ') 
=> "03:23 PM 09/04/12" 
>> s 
=> "03:23 PM 09/04/12" 
0
s ="03:23 PM on 09/04/12" 
s.gsub(' on ', ' ') 
#>> "03:23 PM 09/04/12" 

您可以在不regex去在這種情況下,但如果你想使用regex,然後用s.gsub!(/ on /, ' ')

2

使用RegExp對象的GSUB參數,則不需要(/ on /)你也可以使用一個字符串 - 這對我有用!

s = "03:23 PM on 09/04/12" 

p s.gsub " on ", " " 
#=> "03:23 PM 09/04/12"