例如:
"Angry Birds 2.4.1".split(" ", 2)
=> ["Angry", "Birds 2.4.1"]
Run Code Online (Sandbox Code Playgroud)
如何将字符串拆分为: ["Angry Birds", "2.4.1"]
Vad*_*rov 90
irb(main):068:0> str = "Angry Birds 2.4.1"
=> "Angry Birds 2.4.1"
irb(main):069:0> str.rpartition(' ')
=> ["Angry Birds", " ", "2.4.1"]
Run Code Online (Sandbox Code Playgroud)
由于返回值是一个数组,使用.首先和.去年将允许治疗结果,如果它是一分为二,例如
irb(main):073:0> str.rpartition(' ').first
=> "Angry Birds"
irb(main):074:0> str.rpartition(' ').last
=> "2.4.1"
Run Code Online (Sandbox Code Playgroud)
我有这样的解决方案:
class String
def split_by_last(char=" ")
pos = self.rindex(char)
pos != nil ? [self[0...pos], self[pos+1..-1]] : [self]
end
end
"Angry Birds 2.4.1".split_by_last #=> ["Angry Birds", "2.4.1"]
"test".split_by_last #=> ["test"]
Run Code Online (Sandbox Code Playgroud)
有人喜欢这样吗?拆分空格后面除了一个空格,直到字符串末尾.
"Angry Birds 2.4.1".split(/ (?=\S+$)/)
#=> ["Angry Birds", "2.4.1"]
Run Code Online (Sandbox Code Playgroud)
我似乎无法在我的评论中正确格式化示例代码,因此我将其作为单独的答案提交,尽管Vadym Tyemirov值得称赞String#rpartition他在上面提供的解决方案。
我只是想补充一点,它String#rpartition与 Ruby 的“don't care”变量非常相配,因为通常您确实只对结果数组的第一个和最后一个元素感兴趣,而不对中间元素(分隔符)感兴趣:
[1] pry(main)> name, _, version = "Angry Birds 2.4.1".rpartition(' ')
=> ["Angry Birds", " ", "2.4.1"]
[2] pry(main)> name
=> "Angry Birds"
[3] pry(main)> version
=> "2.4.1"
Run Code Online (Sandbox Code Playgroud)
所以不需要Array#first或Array#last...少即是多!:-)