从第二次出现的字符中拆分字符串

时间:2011-05-11 12:51:26

标签: ruby string

如何从第二次出现的角色

中拆分字符串
str = "20050451100_9253629709-2-2"

I need the output 
["20110504151100_9253629709-2", "2"]

6 个答案:

答案 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(/^[^-]+-[^-]+-/,'')
  1. ^开始了
  2. [^-]是单个字符,破折号除外。
  3. [^-]+使第2项成为一个或多个破折号之外的单个字符
  4. -是破折号
  5. [^-]+-是以上内容的重复
  6. 使用gsub删除与模式匹配的字符