案例1(尾随空格)
> "on behalf of all of us ".split(/\W+/)
=> ["on", "behalf", "of", "all", "of", "us"]
但是如果有前导空格则会给出以下
案例2(领先空间)
> " on behalf of all of us".split(/\W+/)
=> ["", "on", "behalf", "of", "all", "of", "us"]
我也期待案例2案例2的结果。
ADDED
> "@dhh congratulations!!".split(/\W+/)
=> ["", "dhh", "congratulations"]
有人请帮我理解这种行为吗?
答案 0 :(得分:4)
<强> [更新] 强>
跳过正则表达式,只是在太空中拆分!
> "@dhh congratulations!!".split
=> ["@dhh", "congratulations"]
\W
匹配任何非单词字符,包括空格。因此,解析器在开始时看到一个空格&amp;空间后的一些字符;它分裂了。但是如果它最后的空间,就没有其他冗长的char [a-zA-Z0-9]
可以分开。
要获得一致的行为,您应该使用#strip
方法删除空格。
案例1(尾随空格)
1.9.3p327 :007 > " on behalf of all of us ".strip.split(/\W+/)
=> ["on", "behalf", "of", "all", "of", "us"]
案例2(领先空间)
1.9.3p327 :008 > "on behalf of all of us ".strip.split(/\W+/)
=> ["on", "behalf", "of", "all", "of", "us"]
答案 1 :(得分:1)
来自docs:
拆分(模式= $;,[限制])→anArray
[...] 如果省略limit参数,则禁止尾随空字段。如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回)。如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段。
答案 2 :(得分:0)
仅供参考,以下是为我工作
" @dhh congratulations!!".gsub(/^\W+/,'').split /\W+/
另一个
" @dhh congratulations!!".scan /\w+/
两者都给出了预期的结果。但是对于像
这样的简短形式有一个警告 > " Don't be shy.".scan /\w+/
=> ["Don", "t", "be", "shy"]
我实际上收集的不是文章,连词,介词等等。所以无论如何我忽略了这些简短的形式,因此我使用了这个解决方案。
我正在准备推文中的词云。如果您知道任何经过验证的算法,请分享。