Ruby:在字符处拆分字符串,从右侧开始计算

jpa*_*kal 26 ruby string split

简短版 - 如何在ruby中使用Python rsplit()?

更长的版本 - 如果我想在第一个'.'将一个字符串拆分为两个部分(名称,后缀).性格,这很好地完成了工作:

name, suffix = name.split('.', 2)
Run Code Online (Sandbox Code Playgroud)

但如果我想在最后(最右边)分开'.' 性格,我还没有能够提出比这更优雅的东西:

idx = name.rindex('.')
name, suffix = name[0..idx-1], name[idx+1..-1] if idx
Run Code Online (Sandbox Code Playgroud)

请注意,原始名称字符串可能根本没有点,在这种情况下,名称应该是不变的,后缀应该是nil; 它也可能有多个点,在这种情况下,只有最后一个后面的位应该是后缀.

Mar*_*une 45

String#rpartition 这样做:

name, match, suffix = name.rpartition('.')
Run Code Online (Sandbox Code Playgroud)

它是在Ruby 1.8.7中引入的,因此如果运行早期版本,您可以使用require 'backports/1.8.7/string/rpartition'它来工作.


jpa*_*kal 5

戴上思考上限一段时间,想出了这个正则表达式:

"what.to.do.now".split(/\.([^.]*)$/)
=> ["what.to.do", "now"]
Run Code Online (Sandbox Code Playgroud)

或者用人的术语"在点上分开,而不是在字符串的末尾跟着另一个点".与无点字符串和点序列一起使用也很好:

"whattodonow".split(/\.([^.]*)$/)
=> ["whattodonow"]
"what.to.do...now".split(/\.([^.]*)$/)
=> ["what.to.do..", "now"]
Run Code Online (Sandbox Code Playgroud)