作为更大系列操作的一部分,我试图获取更大字符串的标记化块,并去掉标点符号、非单词官样文章等。我最初的尝试使用String#gsub
和\W
正则表达式字符类,如下所示:
my_str = "Hello,"
processed = my_str.gsub(/\W/,'')
puts processed # => Hello
超级超级超级简单。当然,现在我正在扩展我的程序来处理非拉丁字符,一切都崩溃了。红宝石的\W
似乎是这样的[^A-Za-z0-9_]
,当然,不包括带有变音符号的内容(ü、í 等)。所以,现在我以前简单的代码以令人不快的方式崩溃和烧毁:
my_str = "Quística."
processed = my_str.gsub(/\W/,'')
puts processed # => Qustica
请注意,gsub() 有意地删除了带重音的“í”字符。我想到解决这个问题的一种方法是扩展 Ruby 的 \W 白名单以包含更高的 Unicode 代码点,但是它们的数量非常多,而且我知道我会错过一些并导致问题(并且我们甚至不要开始考虑非拉丁语言......)。另一个解决方案是将我想要删除的所有内容(标点符号、$/%/&/™ 等)列入黑名单,但是,同样,有很多东西,我really不想开始玩黑名单打地鼠游戏。
有没有人找到解决这个问题的原则性解决方案?是否有一些隐藏的、Unicode 友好的版本\W
我还没有发现吗?谢谢!
您需要使用“-Ku”选项运行 ruby 以使其使用 UTF-8。请参阅文档命令行选项 http://phrogz.net/programmingruby/rubyworld.html。当我使用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)