2017-04-23 85 views

回答

5

gsub是矫枉过正这里。使用String#tr

string = "bi2gger 1is 00ggooder" 
string.tr("^g", " ") 
# => " gg   gg  " 

这将返回一个新的字符串。要修改原始字符串,请使用tr!

看到它在repl.it:https://repl.it/KJPY

2

您可以使用String#gsub[^g]它取代除g所有字符,用" "

string.gsub(/[^g]/," ") #=> " gg   gg  " 
0

这可以用正则表达式

此问题,可煮可实现正如评论所说的那样,直到正则表达式。 为了替代每个“G”字从你的字符串,你可以使用正则表达式:/[^g]/

因此最简单的解决方案是使用String#gsub和正则表达式来改变匹配规则的所有字符。 (请注意,您也有这样的方法String#gsub!的爆炸版本将取代原来的字符串)

可以读/尝试正则表达式在网站RegexPal

0

String#gsub可以在这里使用。

string = "bi2gger 1is 00ggooder" 

string.gsub(/./) { |s| s=='g' ? 'g' : ' ' } 
    #=> " gg   gg  " 
+0

'Hash.new('')...'在这里也适用。 –

+0

读者:我以前有'h = Hash.new {''} .tap {| h | h [“g”] =“g”}; string.gsub(/./,h)'。 @乔丹的建议是一个改进,但它仍然是一个相当蹩脚的答案。 (我在想什么?)因此,我改变了它,但仍然更喜欢乔丹的答案。 –

相关问题