Ruby字符串分成忽略所有特殊字符的单词:更简单的查询

我需要在任何地方使用非单词字符将查询拆分为单词。 例如:

query = "I am a great, boy's and I like! to have: a lot-of-fun and @do$$nice&acti*vities+enjoy good ?times." 

应输出:

 ["I", "am", "a", "great", "", "boy", "s", "and", "I", "like", "", "to", "have", "", "a", "lot", "of", "fun", "and", "", "do", "", "nice", "acti", "vities", "enjoy", "good", "", "times"] 

这样做的伎俩,但有一个更简单的方法吗?

 query.split(/[ ,'!:\\@\\$\\&\\*+?.-]/) 

 query.split(/\W+/) # => ["I", "am", "a", "great", "boy", "s", "and", "I", "like", "to", "have", "a", "lot", "of", "fun", "and", "do", "nice", "acti", "vities", "enjoy", "good", "times"] query.scan(/\w+/) # => ["I", "am", "a", "great", "boy", "s", "and", "I", "like", "to", "have", "a", "lot", "of", "fun", "and", "do", "nice", "acti", "vities", "enjoy", "good", "times"] 

这与预期的输出不同,因为它不包括空字符串。

我正在添加这个答案,因为@ sawa没有完全重现所需的输出:

 #Split using any single non-word character: query.split(/\W/) #=> ["I", "am", "a", "great", "", "boy", "s", "and", "I", "like", "", "to", "have", "", "a", "lot", "of", "fun", "and", "", "do", "", "nice", "acti", "vities", "enjoy", "good", "", "times"] 

现在,如果你不想在结果中使用空字符串,只需使用sawa的答案。

如果字符串包含多个空格,则上面的结果将在结果中创建许多空字符串,因为每个额外的空格将再次匹配并创建新的分割点。 为避免这种情况,我们可以添加或条件:

 # Split using any number of spaces or a single non-word character: query.split(/\s+|\W/)