Como parte de una serie más grande de operaciones, estoy tratando de tomar pedazos tokenizados de una cadena más grande y deshacerme de la puntuación, palabras sin sentido, etc. primer intento de utilizar String#gsub
y la clase de caracteres \W
expresión regular, así:Cadena de Ruby # caracteres gsub, unicode y sin palabra
my_str = "Hello,"
processed = my_str.gsub(/\W/,'')
puts processed # => Hello
super, super, super simple. Por supuesto, ahora estoy ampliando mi programa para tratar con caracteres no latinos, y todo se rompe. Ruby's \W
parece ser algo así como [^A-Za-z0-9_]
, que, por supuesto, excluye cosas con signos diacríticos (ü, í, etc.). Por lo tanto, ahora mis ex-simples accidentes y quemaduras de código de forma desagradable:
my_str = "Quística."
processed = my_str.gsub(/\W/,'')
puts processed # => Qustica
en cuenta que una gsub() amablemente eliminado el carácter "i" acentuado. Una forma en que pensé arreglar esto sería extender Ruby's \ W whitelist para incluir puntos de código Unicode más altos, pero hay una gran cantidad de ellos, y sé que extrañaré algunos y causaré problemas en el futuro (y ni siquiera comencemos a pensar en idiomas no latinos ...). Otra solución sería poner en lista negra todas las cosas que quiero eliminar (puntuación, $ /%/&/™, etc.), pero, una vez más, hay una gran cantidad de eso y yo realmente no quiero comienza a jugar blacklist-whack-a-mole.
¿Alguien ha encontrado una solución de principio para este problema? ¿Hay alguna versión oculta, compatible con Unicode de \W
que aún no haya descubierto? ¡Gracias!
Gah. Pensé que ya estaba en el modo UTF-8. Eso soluciona las cosas, gracias por la ayuda! –