Ruby:从字符串中提取单词

syb*_*ohy 31 ruby regex parsing ruby-on-rails

我正在尝试解析字符串中的单词并将它们放入数组中.我尝试过以下的事情:

@string1 = "oriented design, decomposition, encapsulation, and testing. Uses "
puts @string1.scan(/\s([^\,\.\s]*)/)
Run Code Online (Sandbox Code Playgroud)

它似乎做了伎俩,但它有点摇摇欲坠(我应该包括更多的特殊字符).在红宝石中有更好的方法吗?

可选:我有一个cs课程描述.我打算从中提取所有单词并将它们放在一个字符串数组中,从生成的数组中删除英语中最常用的单词,然后将其余单词用作用户可用于搜索cs的标记课程.

Dav*_*hme 59

拆分命令.

   words = @string1.split(/\W+/)
Run Code Online (Sandbox Code Playgroud)

将基于正则表达式将字符串拆分为数组.\ W表示任何"非单词"字符,"+"表示组合多个分隔符.

  • 这并不总是有效."CaféRestaurant".split(/\W + /)=> ["Caf","餐厅"]放下特殊字符. (7认同)
  • 这不适用于诸如“ you're”和“ it's”之类的紧缩单词 (2认同)

BF4*_*BF4 13

好吧,如果这是您感兴趣的分隔符,您可以在空格上拆分字符串

@string1.split(' ')
Run Code Online (Sandbox Code Playgroud)

或拆分字边界

\W  # Any non-word character

\b  # Any word boundary character
Run Code Online (Sandbox Code Playgroud)

或者非言语

\s  # Any whitespace character
Run Code Online (Sandbox Code Playgroud)

提示:尝试在http://rubular.com上测试其中的每一个

请注意,ruby 1.9与1.8有一些差异


laz*_*per 13

对我来说,最好的分裂句子是:

line.split(/[^[[:word:]]]+/)
Run Code Online (Sandbox Code Playgroud)

即使多语言单词和标点符号完美地工作:

line = 'English words, Polski ?urek!!! crème fraîche...'
line.split(/[^[[:word:]]]+/)
=> ["English", "words", "Polski", "?urek", "crème", "fraîche"] 
Run Code Online (Sandbox Code Playgroud)

  • ["can", "t"] 处理收缩 (2认同)