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 № 1Una 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"