/ / ¿La forma más rápida de buscar y reemplazar en una cadena en Ruby? - ruby-on-rails, ruby, regex, string

¿La forma más rápida de buscar y reemplazar en una cadena en Ruby? - Ruby-on-Rails, ruby, regex, string

Estoy construyendo una biblioteca que limpia el contenido generado por el usuario y tengo miles de reemplazos de cadena para hacer (el rendimiento es clave).

Que es el lo más rápido ¿Cómo hacer búsquedas y reemplazos en cadenas?

Aquí hay un ejemplo de los reemplazos que realizará la biblioteca:

u2 => you too
2day => today
2moro => tomorrow
2morrow => tomorrow
2tomorow  => tomorrow

Hay cuatro casos sobre cómo puede aparecer la cadena:

  • Palabra de inicio en la cadena (tiene un espacio al final, pero no delante) 2day sample
  • Medio de la cadena (tiene un espacio al frente y al final) sample 2day sample
  • Fin de la cadena (solo tiene un espacio al frente, pero es la última palabra) sample 2day
  • Toda la cadena es una coincidencia 2day

es decir, la expresión regular no debería "t reemplácelo si está en el medio de una palabra como sample2daysample

Respuestas

2 para la respuesta № 1

Una posible solución:

replaces = {"u2" => "you too", "2day" => "today", "2moro" => "tomorrow"}

str = "2day and 2moro are u2 sample2daysample"

#exp = Regexp.union(replaces.keys)  #it is the best but to use b this should be a quiet different
exp = Regexp.new(replaces.keys.map { |x| "\b" + Regexp.escape(x) + "\b" }.join("|"))
str = str.gsub(exp, replaces)

# => "today and tomorrow are you too sample2daysample"