我正在尝试从字符串中解析单词并将它们放入数组中。我尝试过以下的事情:
@string1 = "oriented design, decomposition, encapsulation, and testing. Uses "
puts @string1.scan(/\s([^\,\.\s]*)/)
似乎可以做到这一点,但它有点不稳定(例如我应该包含更多特殊字符)。在红宝石中有更好的方法吗?
可选:我有cs课程说明。我打算从中提取所有单词并将它们放在一个字符串数组中,从生成的数组中删除英语中最常用的单词,然后将其余单词用作用户可用于搜索cs的标记课程。
答案 0 :(得分:59)
拆分命令。
words = @string1.split(/\W+/)
将基于正则表达式将字符串拆分为数组。 \ W表示任何“非单词”字符,“+”表示组合多个分隔符。
答案 1 :(得分:13)
好吧,你可以在空格上分割字符串,如果这是你感兴趣的分隔符
@string1.split(' ')
或拆分字边界
\W # Any non-word character
\b # Any word boundary character
或非言语
\s # Any whitespace character
提示:尝试在http://rubular.com
上测试每一项请注意,ruby 1.9与1.8
存在一些差异答案 2 :(得分:12)
对我而言,分裂句子的最好方法是:
line.split(/[^[[:word:]]]+/)
即使使用多语言单词和标点符号也能完美运行:
line = 'English words, Polski Żurek!!! crème fraîche...'
line.split(/[^[[:word:]]]+/)
=> ["English", "words", "Polski", "Żurek", "crème", "fraîche"]
答案 3 :(得分:1)
对于Rails,您可以使用以下内容:
@string1.split(/\s/).delete_if(&:blank?)
答案 4 :(得分:0)
我会这样写:
@string
.split(/,+|\s+/) # any ',' or any whitespace characters(space, tab, newline)
.reject(&:empty?)
.map { |w| w.gsub(/\W+$|^\W+^*/, '') } # \W+$ => any trailing punctuation; ^\W+^* => any leading punctuation
irb(main):047:0> @string1 = "oriented design, 'with', !!qwe, and testing. can't rubyisgood#)(*#%)(*, and,rails,is,good"
=> "oriented design, 'with', !!qwe, and testing. can't rubyisgood#)(*#%)(*, and,rails,is,good"
irb(main):048:0> @string1.split(/,+|\s+/).reject(&:empty?).map { |w| w.gsub(/\W+$|^\W+^*/, '')}
=> ["oriented", "design", "with", "qwe", "and", "testing", "can't", "rubyisgood", "and", "rails", "is", "good"]