tr和gsub有什么区别?

时间:2014-11-05 03:08:43

标签: ruby

我正在阅读Ruby文档,并对gsubtr之间的区别感到困惑。这两者有什么区别?

3 个答案:

答案 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