分割字符串
如何将字符串从字符分割字符串
str = "20050451100_9253629709-2-2"
I need the output
["20110504151100_9253629709-2", "2"]
你可以使用正则表达式匹配:
str = "20050451100_9253629709-2-2"
m = str.match /(.+)-(\d+)/
[m[1], m[2]] # => ["20050451100_9253629709-2", "2"]
将R中文表达式匹配“任何”,后面跟着一个破折号,后面跟着数字。
谢谢@hallidave。我认为,这在性能方面是最好的。 – 2011-05-11 13:32:31
这个答案是相当古老的,但有人可以描述或链接字符串匹配的语法? – 2015-10-31 16:01:31
第二次出现分裂。如果你总是有两个连字符,你可以得到-
的最后一个索引:
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]
"20050451100_9253629709-2-2"[/^([^-]*\-[^-]*)\-(.*)$/]
[$1, $2] # => ["20050451100_9253629709-2", "2"]
这将匹配任何字符串,将其拆分第二次出现-
。
+1这一个实际使用第二次出现,而不是最后一次。你可以这样更简洁:'str.match(/^([^-]*\-[^-]*)\-(.*)$/)。to_a [1 ..- 1]' – Kelvin 2011-07-26 17:23:10
你可以分开拆分并重新联合起来回:
str = "20050451100_9253629709-2-2"
a = str.split('-')
[a[0..1].join('-'), a[2..-1].join('-')]
有没有像一个一行:)
str.reverse.split('-', 2).collect(&:reverse).reverse
这将扭转串,由分裂“ - ”一次,因此返回2个元素(在第一个' - '前面的东西以及它后面的所有东西),然后反转这两个元素,然后是数组本身。
编辑
*before, after = str.split('-')
puts [before.join('-'), after]
根据您接受的答案,好像你是愿意接受分裂最终连字符,而不是严格的第二位。你应该确保在你的数据中,第二个总是最后的。 – Kelvin 2011-07-26 17:17:00