2013-08-28 42 views
2

我有一个字符串数组,每个字符串都有任意的单词和任意数量的单词。对于每个字符串,我只需要收集第一个和最后一个单词。我可以做的第一个或最后一个:ruby​​从字符串中收集第一个和最后一个单词

a = vs.split("\n"). 
    select { |i| i =~ /^\s+\d/ }. 
    collect { |i| i.scan(/\w+/).<first or last> } 

但不适合首先和最后。有什么建议么?

+1

请给一些样品的输入和预期的输出也。只有代码是没有意义的.. –

回答

9

Array#values_at应该做的伎俩:

str = "a b c d e" 
str.scan(/\w+/).values_at(0, -1) 
#=> ["a", "e"] 
+1

不错 - 另一个Ruby方法('values_at')我不知道! – Chowlett

+0

如果字符串有特殊字符,则不起作用。 split()方法解决了这个问题。例如,“CagãodoCaraças”.split('').values_at(0,-1) – 2013-11-05 18:41:54

+0

在这种情况下,您可以使用'/ [[:alpha:]] + /'。 – Stefan

1

你可以做以下也:

str = "I am a boy" 
[str[/^\w+/],str[/\w+$/]] 
# => ["I", "boy"] 
相关问题