Tr 和 Gsub 有什么区别?

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

45756 次浏览

tr返回 str的一个副本,其中 from_str中的字符被 to_str中的相应字符替换。如果 to_strfrom_str短,则用它的最后一个字符填充,以保持对应。 Http://apidock.com/ruby/string/tr

gsub返回 str的一个副本,其中模式的所有匹配项都替换为第二个参数。模式通常是 Regexp; 如果给定为 String,它包含的任何正则表达式元字符都将按字面意思解释,例如,\d将匹配后跟 d的间隙,而不是数字。 Http://apidock.com/ruby/string/gsub

  • tr只能用单个固定字符替换单个字符(尽管您可以在单个 tr调用中放置多个此类匹配项) ,但是速度很快。
  • gsub可以使用正则表达式匹配复杂的模式,并用复杂的计算结果替换,但比 tr慢。

如果要替换(翻译)单个字符,请使用 tr

tr匹配 单身字符(不通过正则表达式) ,因此字符不需要以相同的顺序出现在第一个字符串参数中。找到一个字符后,将其替换为在第二个字符串参数的同一索引处找到的字符:

'abcde'.tr('bda', '123')
#=> "31c2e"


'abcde'.tr('bcd', '123')
#=> "a123e"

当需要使用正则表达式或需要替换较长的子字符串时,请使用 gsub:

'abcde'.gsub(/bda/, '123')
#=> "abcde"


'abcde'.gsub(/b.d/, '123')
#=> "a123e"