¿Cuál es la diferencia entre gsub y sub métodos para Ruby Strings?


Respuestas:


208

Las gsiglas de global, como en reemplazar globalmente (todos):

En irb:

>> "hello".sub('l', '*')
=> "he*lo"
>> "hello".gsub('l', '*')
=> "he**o"

13
Si. Entiendo ahora. En mi defensa, no creo que esto fuera muy obvio ... Hasta ahora, eso es.
Ryanmt

15
¡Estoy de acuerdo contigo en que no es obvio! Java los llama replacey replaceAll. Pero Ruby tiene sus raíces en Perl, que usa el gmodificador. Es solo una de esas cosas.
Ray Toal

1
Afortunadamente, ahora es obvio. Lo sabré en el futuro.
Ryanmt

Por cierto, subes mucho más rápido que gsub, hay un punto de referencia aquí github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

Veo un comportamiento diferente a esto: ¿ A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" Alguna idea de por qué gsub!solo parece encontrar / reemplazar solo la primera instancia cuando se usan grupos de expresiones regulares?
Bennett Talpers

31

La diferencia es que subsolo reemplaza la primera ocurrencia del patrón especificado, mientras gsubque lo hace para todas las ocurrencias (es decir, reemplaza globalmente).


10
Si hubiera respondido un minuto antes, tal vez 1020 repeticiones más hubieran sido suyas. :)
Andrew Grimm

3
value = "abc abc"
puts value                                # abc abc
# Sub replaces just the first instance.
value = value.sub("abc", "---")
puts value                                # --- abc
# Gsub replaces all instances.
value = value.gsub("abc", "---")
puts value                                # --- ---

-2

suby gsubrealizar el reemplazo de la primera y todas las coincidencias respectivamente.

sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
    fixed = FALSE, useBytes = FALSE)

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)


sub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )  
##"An Introduction to R Software Course will be of 8 weeks duration"

gsub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )
##"An Introduction to R Software Course will be of 8 weeks duration"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.