a = "foobarfoobarhmm"
Ruby - sustituir la primera aparición de una subcadena por otra cadena
quiero la salida como ` "fooBARfoobarhmm"
es decir, sólo la primera aparición de "barra" debe sustituirse por "BAR".
a = "foobarfoobarhmm"
Ruby - sustituir la primera aparición de una subcadena por otra cadena
quiero la salida como ` "fooBARfoobarhmm"
es decir, sólo la primera aparición de "barra" debe sustituirse por "BAR".
Uso #sub
:
a.sub('bar', "BAR")
String#sub
es lo que necesita, como ya se dijo Yossi. Pero me gustaría usar una expresión regular en su lugar, ya que es más rápido:
a = 'foobarfoobarhmm'
output = a.sub(/foo/, 'BAR')
Acabo de hacer un punto de referencia y regex toma un 50% más de tiempo que simplemente usar una cadena como parámetro para el sub. –
Lo comprobé y la versión de Regexp es más rápida. Usé MRI 1.9.2, 1.9.3, 2.0.0 e incluso JRuby, todos ellos más rápidos en la versión Regexp. El código de referencia: https://gist.github.com/tbuehlmann/5574713 ¿Desea proporcionar su punto de referencia? – tbuehlmann
Hmmmm. Debo disculparme por mi afirmación, parece que cometí un error en mi punto de referencia. La expresión regular es más rápida. –
para reemplazar la primera ocurrencia, simplemente hacer esto:
str = "Hello World"
str['Hello'] = 'Goodbye'
# the result is 'Goodbye World'
incluso se puede utilizar expresiones regulares:
str = "I have 20 dollars"
str[/\d+/] = 500.to_s
# will give 'I have 500 dollars'
'500.to_s' a veces se escribe' "500" '. :-) –
Lo escribí así intencionalmente. para indicar que necesita asignar una cadena explícita. Porque la conversión no es automática aquí. Si haces esto en vez de 'str [/ \ d + /] = 500', obtendrás un error' TypeError: no hay conversión implícita de Fixnum en String'. –
¡gracias! Estaba usando gsub() que reemplaza todas las apariciones. – Sayuj