¿Cómo dividir la cadena de la segunda ocurrencia del carácterSeparar una cadena de la segunda ocurrencia del carácter
str = "20050451100_9253629709-2-2"
I need the output
["20110504151100_9253629709-2", "2"]
¿Cómo dividir la cadena de la segunda ocurrencia del carácterSeparar una cadena de la segunda ocurrencia del carácter
str = "20050451100_9253629709-2-2"
I need the output
["20110504151100_9253629709-2", "2"]
Usted podría utilizar la detección de expresiones regulares:
str = "20050451100_9253629709-2-2"
m = str.match /(.+)-(\d+)/
[m[1], m[2]] # => ["20050451100_9253629709-2", "2"]
El r expresión egular coincide con "cualquier cosa" seguido de un guión seguido de dígitos numéricos.
gracias @hallidave. Creo que este es el mejor rendimiento en cuanto a rendimiento. –
Esta respuesta es bastante antigua, pero ¿podría alguien describir o vincular la sintaxis de la coincidencia de cadenas? –
Si siempre tiene dos guiones se puede obtener el último índice del -
:
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"]
que coincidirá con cualquier cadena, partiéndolo por la segunda aparición de -
.
+1 Éste realmente usa la segunda ocurrencia y no la final. Puede hacerlo aún más breve de esta manera: 'str.match (/^([^-]*\-[^-]*)\-(.*)$/). To_a [1 ..- 1]' – Kelvin
Se podría dividir aparte y unirse de nuevo juntos de nuevo:
str = "20050451100_9253629709-2-2"
a = str.split('-')
[a[0..1].join('-'), a[2..-1].join('-')]
No hay nada como una sola línea :)
str.reverse.split('-', 2).collect(&:reverse).reverse
Se invertirá la cadena, dividido por '-' una vez, devolviendo así 2 elementos (el material delante del primero '-' y todo lo que le sigue), antes de invertir ambos elementos y luego la matriz misma.
Editar
*before, after = str.split('-')
puts [before.join('-'), after]
gracias @gnab. Aquí, estás haciendo un proceso muy largo ... Necesito acortar el proceso –
De hecho, simplemente estaba tratando de evitar las expresiones regulares ilegibles, que en mi humilde opinión son un poco exageradas para este problema bastante simple. Actualicé mi respuesta con una alternativa de dos líneas. – gnab
Para mí, la mejor respuesta entre todas las demás. – Aleks
En función de su respuesta aceptada, parece que usted está dispuesto a conformarse con la división en el guión final, no lo estrictamente la segunda. Debe asegurarse de que en sus datos, el 2 sea siempre el final. – Kelvin