Ich habe die Ruby-Dokumentation gelesen und war verwirrt über den Unterschied zwischen gsub
und tr
. Was ist der Unterschied zwischen den beiden?
Ich habe die Ruby-Dokumentation gelesen und war verwirrt über den Unterschied zwischen gsub
und tr
. Was ist der Unterschied zwischen den beiden?
Antworten:
Verwenden tr
Sie diese Option, wenn Sie einzelne Zeichen ersetzen (übersetzen) möchten.
tr
Übereinstimmungen mit einzelnen Zeichen (nicht über einen regulären Ausdruck), daher müssen die Zeichen im ersten Zeichenfolgenargument nicht in derselben Reihenfolge vorkommen. Wenn ein Zeichen gefunden wird, wird es durch das Zeichen ersetzt, das im zweiten Zeichenfolgenargument am selben Index gefunden wird:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
Verwenden gsub
Sie diese Option, wenn Sie einen regulären Ausdruck verwenden müssen oder wenn Sie längere Teilzeichenfolgen ersetzen möchten:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
tr
bedeutet "übersetzen", wie in "Zeichen übersetzen", was genau das ist, was er tut. Es ist nach dem gleichnamigen Unix-Dienstprogramm benannt (das für seine obskuren und kurzen Namen bekannt ist).
tr
kann nur ein einzelnes Zeichen durch ein einzelnes festes Zeichen ersetzen (obwohl Sie mehrere Übereinstimmungen dieser Art in einem einzigen tr
Aufruf platzieren können), ist aber schnell.gsub
kann komplizierte Muster mit Regex abgleichen und durch ein kompliziertes Berechnungsergebnis ersetzen, ist aber langsamer als tr
.tr
mehrmals schneller sind als gsub
. Hier ist ein Benchmark, wie schnell als sein tr
könnte gsub
. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
tr
Gibt eine Kopie von zurück, str
wobei die Zeichen in from_str
durch die entsprechenden Zeichen in ersetzt werden to_str
. Wenn to_str
es kürzer als ist from_str
, wird es mit seinem letzten Zeichen aufgefüllt, um die Entsprechung aufrechtzuerhalten.
http://apidock.com/ruby/String/tr
gsub
Gibt eine Kopie von zurück, str
wobei alle Vorkommen von Mustern das zweite Argument ersetzen. Das Muster ist normalerweise ein Regexp; Wenn es als Zeichenfolge angegeben wird, werden alle darin enthaltenen Metazeichen für reguläre Ausdrücke wörtlich interpretiert, z. B. \d
stimmen sie mit einem Spiel überein, gefolgt von d
einer Ziffer.
http://apidock.com/ruby/String/gsub