我正在阅读Ruby文档,并对gsub
和tr
之间的区别感到困惑。这两者有什么区别?
答案 0 :(得分:154)
如果要替换(翻译)单个字符,请使用tr
。
tr
匹配单个字符(不是通过正则表达式),因此字符不需要在第一个字符串参数中以相同的顺序出现。找到一个字符后,它将替换为在第二个字符串参数中的相同索引处找到的字符:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
当您需要使用正则表达式或想要替换更长的子字符串时,请使用gsub
:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
答案 1 :(得分:35)
tr
只能用一个固定字符替换单个字符(尽管您可以在单个tr
调用中放置此类多个匹配项)但速度很快。gsub
可以使用正则表达式匹配复杂的模式,并替换为复杂的计算结果,但速度低于tr
。答案 2 :(得分:8)
tr
会返回str
的副本,from_str
中的字符会被to_str
中的相应字符替换。如果to_str
小于from_str
,则会使用其最后一个字符进行填充,以保持对应关系。
http://apidock.com/ruby/String/tr
gsub
返回str
的副本,其中所有出现的模式都替换为第二个参数。该模式通常是Regexp;如果作为字符串给出,它包含的任何正则表达式元字符将按字面解释,例如, \d
将匹配后跟d
的反对,而不是数字。
http://apidock.com/ruby/String/gsub