2011-03-09 16 views
51

Nuestra aplicación está extrayendo nombres de personas que usan Twitter para iniciar sesión.¿Cómo dividir la cadena en solo dos partes con un personaje dado en Ruby?

Twitter proporciona los nombres completos en una sola cadena.

Ejemplos

1. "Froederick Frankenstien" 
2. "Ludwig Van Beethoven" 
3. "Anne Frank" 

me gustaría dividir la cadena en sólo dos VARs (first y last) en base a la primera (espacio) " " encontrados.

Example First Name Last Name 
1   Froederick Frankenstein 
2   Ludwig  Van Beethoven 
3   Anne   Frank 

estoy familiarizado con String#split pero no estoy seguro de cómo sólo para dividir una vez. Se aceptará la respuesta más Ruby-Way ™ (elegante).

+0

Es decir '' ' "Ludwig Van Beethoven" .split ('', 2) [ "Ludwig Van", "Beethoven"] ' '' Al no ver un rsplit – Justin

+0

parece que su 'Cadena # split' podría haber sido parche de mono o algo así. Vea aquí: [repl.it: Clqa] (https://repl.it/Clqa) – naomik

+0

Gracias por la respuesta. Estoy buscando una solución nativa para el comportamiento que he establecido antes de implementarme. Actualmente obtengo el estándar ["Ludwig", "Van Beethoven"]. – Justin

Respuesta

128

String # split toma un segundo argumento, el límite.

str.split(' ', 2) 

deberían hacer el truco.

+3

Supongo que estoy ** no ** familiar (suficiente) con 'String # split'. Gracias :) – naomik

+0

muy agradable, que no sabían dividida toma un segundo argumento – jordelver

+0

Es decir '' ' "Ludwig Van Beethoven" .split ('', 2) [ "Ludwig Van", "Beethoven"] '' ' No veo un rsplit – Justin

12
"Ludwig Van Beethoven".split(' ', 2) 

El segundo parámetro limita el número en el que desea dividirlo.

También puede hacer:

"Ludwig Van Beethoven".partition(" ") 
+1

' split' y ' partition' tiene resultados diferentes: '" abc ".split (" ", 2) # => [" a "," bc "]; "a b c" .partition ("") # => ["a", "", "b c"] ' – Dorian

8

El segundo argumento de .split() especifica el número de divisiones que debe hacer:

'one two three four five'.split(' ', 2) 

Y la salida:

>> ruby -e "print 'one two three four five'.split(' ', 2)" 
>> ["one", "two three four five"] 
7

Alternativa:

first= s.match(" ").pre_match 
    rest = s.match(" ").post_match 
+0

Esto dará un error si la coincidencia no se encuentra (nil) – montrealmike

Cuestiones relacionadas