Entonces, lo que quiero es obtener n caracteres hasta que llegue a un carácter específico.
tengo esta cadena:
a='2.452811139617034,42.10874821716908|3.132087902867818,42.028314077306646|-0.07934861041448178,41.647538468746916|-0.07948265046522918,41.64754863599606'¿Cómo puedo hacer que solo llegue al personaje? , pero sin obtener ese carácter, y obtenerlo así:
2.452811139617034,42.10874821716908Simplemente puedes hacerlo así:
a.split('|').first
Puede evitar crear un Array innecesario (como Array#split ) o usar Regex (como Array#gsub ) usando.
a = "2.452811139617034,42.10874821716908|3.132087902867818,42.028314077306646|-0.07934861041448178,41.647538468746916|-0.07948265046522918,41.64754863599606" a[0,a.index('|')] #=>"2.452811139617034,42.1087482171" Esto significa seleccionar caracteres en las posiciones 0 hasta el índice de la primera tubería ( | ). Técnicamente hablando, es comenzar en la posición 0 y seleccionar la longitud de n donde n es el índice del carácter de canalización que funciona en este caso porque Ruby usa indexación basada en 0.
Como @CarySwoveland señaló astutamente, es posible que la cadena no contenga una tubería, en cuyo caso mi solución tendría que cambiar a
#to return entire string a[0,a.index('|') || a.size] # or b = a.index(?|) ? a[0,b] : a # or to return empty string a[0,a.index('|').to_i] # or to return nil a[0,a.index(?|) || -1]a[/[^|]+/] #=> "2.452811139617034,42.10874821716908" La expresión regular simplemente coincide con tantos caracteres distintos de '|' que puede