作为更大系列操作的一部分,我正在尝试使用更大字符串的标记块并摆脱标点符号,非单词gobbledygook等。我的初始尝试使用String#gsub
和{{ 1}} regexp字符类,如下所示:
\W
超级,超级,超级简单。当然,现在我正在扩展我的程序来处理非拉丁字符,而且所有的东西都被打破了。 Ruby的my_str = "Hello,"
processed = my_str.gsub(/\W/,'')
puts processed # => Hello
似乎与\W
类似,当然,它排除了变音符号(ü,í等)的内容。所以,现在我以前简单的代码以不愉快的方式崩溃和烧毁:
[^A-Za-z0-9_]
请注意,gsub()必须删除带重音的“í”字符。我想到解决这个问题的一种方法是扩展Ruby的\ W白名单以包含更高的Unicode代码点,但是它们中有很多,我知道我会错过一些并导致问题(并且我们甚至没有开始考虑非拉丁语言......)。另一个解决方案是将我想摆脱的所有东西列入黑名单(标点符号,$ /%/& /™等),但是,再次,有很多这样的东西,我真的不想开始玩blacklist-whack-a-mole。
有没有人找到这个问题的原则解决方案?是否有一些隐藏的,Unicode友好的my_str = "Quística."
processed = my_str.gsub(/\W/,'')
puts processed # => Qustica
版本尚未发现?谢谢!
答案 0 :(得分:12)
您需要使用“-Ku”选项运行ruby以使其使用UTF-8。请参阅command-line options的文档。当我用irb执行此操作时会发生这种情况:
% irb -Ku
irb(main):001:0> my_str = "Quística."
=> "Quística."
irb(main):002:0> processed = my_str.gsub(/\W/,'')
=> "Quística"
irb(main):003:0>
你也可以把它放在#! ruby脚本中的行:
#!/usr/bin/ruby -Ku
答案 1 :(得分:4)
我想在1.9.1中添加它,默认情况下可以正常工作。
$ irb
ruby-1.9.1-p243 > my_str = "Quística."
=> "Quística."
ruby-1.9.1-p243 > processed = my_str.gsub(/\W/,'')
=> "Quística"
ruby-1.9.1-p243 > processed.encoding
=> #<Encoding:UTF-8>
PS。尝试不同版本的Ruby没有比rvm更好的了。 DS。