如何从第二次出现的角色
中拆分字符串str = "20050451100_9253629709-2-2"
I need the output
["20110504151100_9253629709-2", "2"]
答案 0 :(得分:12)
没有什么比单线更好了:)
str.reverse.split('-', 2).collect(&:reverse).reverse
它会反转字符串,用“ - ”分隔一次,从而返回2个元素(第一个' - '前面的东西以及它后面的所有内容),然后反转两个元素,然后再反转数组本身。
修改强>
*before, after = str.split('-')
puts [before.join('-'), after]
答案 1 :(得分:4)
如果您总是有两个连字符,则可以获得-
的最后一个索引:
str = "20050451100_9253629709-2-2"
last_index = str.rindex('-')
# initialize the array to hold the two strings
arr = []
# get the string characters from the beginning up to the hyphen
arr[0] = str[0..last_index]
# get the string characters after the hyphen to the end of the string
arr[1] = str[last_index+1..str.length]
答案 2 :(得分:4)
您可以使用正则表达式匹配:
str = "20050451100_9253629709-2-2"
m = str.match /(.+)-(\d+)/
[m[1], m[2]] # => ["20050451100_9253629709-2", "2"]
正则表达式匹配“任何”后跟一个破折号后跟数字数字。
答案 3 :(得分:3)
"20050451100_9253629709-2-2"[/^([^-]*\-[^-]*)\-(.*)$/]
[$1, $2] # => ["20050451100_9253629709-2", "2"]
这将匹配任何字符串,将其除以第二次出现的-
。
答案 4 :(得分:2)
你可以将它拆分并再次加入:
str = "20050451100_9253629709-2-2"
a = str.split('-')
[a[0..1].join('-'), a[2..-1].join('-')]
答案 5 :(得分:0)
string.gsub(/^[^-]+-[^-]+-/,'')
^
开始了[^-]
是单个字符,破折号除外。[^-]+
使第2项成为一个或多个破折号之外的单个字符-
是破折号[^-]+-
是以上内容的重复gsub
删除与模式匹配的字符