2013-06-20 72 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"