使用Ruby将字符串拆分为单词和标点符号

时间:2015-08-16 16:16:33

标签: ruby regex

我在Ruby工作,我想将一个字符串及其标点符号拆分成一个数组,但我想将撇号和连字符视为单词的一部分。例如,

s = "here...is a     happy-go-lucky string that I'm writing"

应该成为

["here", "...", "is", "a", "happy-go-lucky", "string", "that", "I'm", "writing"].

我最接近的人仍然不够,因为它没有正确地将连字符和撇号视为该词的一部分。

这是我到目前为止最接近的:

s.scan(/\w+|\W+/).select {|x| x.match(/\S/)}

产生

["here", "...", "is", "a", "happy", "-", "go", "-", "lucky", "string", "that", "I", "'", "m", "writing"]

4 个答案:

答案 0 :(得分:7)

您可以尝试以下操作:

s.scan(/[\w'-]+|[[:punct:]]+/)
#=> ["here", "...", "is", "a", "happy-go-lucky", "string", "that", "I'm", "writing"]

答案 1 :(得分:2)

你很亲密:

s.scan(/[\w'-]+|[.,!?]+/)

我们的想法是匹配其中可能包含' / -的字词或标点字符。

答案 2 :(得分:1)

在几乎放弃然后修补一些之后,我似乎已经解决了这个难题。这似乎有效:s.scan(/[\w'-]+|\W+/).select {|x| x.match(/\S/)}。它产生["here", "...", "is", "a", "happy-go-lucky", "string", "that", "I'm", "writing"]

是否有更简洁的方法可以做到这一点,而不必使用#select

答案 3 :(得分:0)

使用split方法。

示例:

str = "word, anotherWord, foo"
puts str.split(",")

返回

word
anotherWord
foo

希望它适合你!

你也可以这个http://ruby.about.com/od/advancedruby/a/split.htm