如何在Ruby中拆分字符串并获取除第一个项以外的所有项?


83

字符串是 ex="test1, test2, test3, test4, test5"

当我使用

ex.split(",").first

它返回

"test1"

现在,我想获取剩余的项,即“ test2,test3,test4,test5”。如果我用

ex.split(",").last

它只返回

"test5"

如何使所有剩余的项目跳过第一个?


等一下,您正在使用splitString方法)Array
康拉德·鲁道夫

抱歉,guyzz ...我在这里使用字符串..我将编辑问题
sgi

Answers:


98

试试这个:

first, *rest = ex.split(/, /)

现在first将是第一个值,rest将是数组的其余部分。


1
在什么版本的Ruby中?我在1.8.7中尝试过,rest只包含“ test2”。
乔纳斯·艾夫斯特伦(JonasElfström),2009年

7
可能意味着first,*rest = ex.split(/,/)
ezpz

是的,我当时无法测试我的线路。first, *rest = ex.split(/,/)确实是我的意思。感谢您清理。
avdgaag

另一种方法是从结果数组中获取范围。 things = ex.split(/,/); things[1..-1]
罗素B

44
ex.split(',', 2).last

末尾的2个表示:分为2个部分,不多。

通常,split会将值切割成尽可能多的片段,使用第二个值可以限制将获得的片段数。使用ex.split(',', 2)将为您提供:

["test1", "test2, test3, test4, test5"]

作为数组,而不是:

["test1", "test2", "test3", "test4", "test5"]

缺点是split,如果要将除第一个值以外的所有值都作为数组而不是字符串,则必须再次进行。仍然是一个不错的把戏。另外,usingex.split(',', 2).last不会返回您提到的数组,只会返回其最后一个值,对吧?
avdgaag

复制粘贴错误哈哈,已解决
163365,2009年

15

既然有了数组,您真正想要的Array#slice不是split

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]

3
因此ex.split(/, /).slice(1..-1),如果您对第一个值不感兴趣,则希望使用字符串来获取除第一个元素以外的所有元素。
avdgaag

9

您可能输错了一些东西。根据我的收集,您从一个字符串开始,例如:

string = "test1, test2, test3, test4, test5"

然后,您想将其拆分为仅保留重要的子字符串:

array = string.split(/, /)

最后,您只需要除第一个元素之外的所有元素:

# We extract and remove the first element from array
first_element = array.shift

# Now array contains the expected result, you can check it with
puts array.inspect

那回答了你的问题吗?



6

对晚会很抱歉,没有人提到删除方法,对此感到有些惊讶:

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"

5

如果您想将它们用作您已经知道的数组,否则您可以将它们中的每一个用作不同的参数...请尝试以下操作:

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")

2

您也可以这样做:

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 

0

尝试在结果数组中的索引在split(",")[i]哪里isplit给出下面的数组

["test1", " test2", " test3", " test4", " test5"] 

可以通过索引访问其元素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.