¿Cómo obtener una subcadena de texto?


172

Tengo texto con longitud ~ 700. ¿Cómo obtengo solo ~ 30 de sus primeros personajes?

Respuestas:



207

Uso String#slice, también alias como [].

a = "hello there"
a[1]                   #=> "e"
a[1,3]                 #=> "ell"
a[1..3]                #=> "ell"
a[6..-1]               #=> "there"
a[-3,2]                #=> "er"
a[-4..-2]              #=> "her"
a[12..-1]              #=> nil
a[-2..-4]              #=> ""
a[/[aeiou](.)\1/]      #=> "ell"
a[/[aeiou](.)\1/, 0]   #=> "ell"
a[/[aeiou](.)\1/, 1]   #=> "l"
a[/[aeiou](.)\1/, 2]   #=> nil
a["lo"]                #=> "lo"
a["bye"]               #=> nil

31
Para ser claros, -1se usa para llegar al final de la cadena, entonces a[1..-1] #=> "ello there".
Joshua Pinter

55
Esto puede ser obvio para algunos, pero es no apropiado el uso de una coma para las posiciones negativas: a[-4,-2]. La notación es válida solamente los dos puntos: a[-4..-2]. Lo aprendí por las malas.
cavpollo 01 de

24

Como lo etiquetó como Rails, puede usar truncar:

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-truncate

Ejemplo:

 truncate(@text, :length => 17)

Extracto es bueno saberlo también, le permite mostrar un extracto de un texto de esta manera:

 excerpt('This is an example', 'an', :radius => 5)
 # => ...s is an exam...

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-excerpt


9
Ruby no es Rails.
Joó Ádám

Andrew Marshall cambió la etiqueta de @ JoóÁdám
apneadiving

¿Hubo alguna justificación para el cambio? Si el OP funciona en Rails y solicita una solución en Rails, entonces la pregunta debe etiquetarse con Rails. Y entonces tu respuesta tendría sentido.
Joó Ádám

@ JoóÁdám, la pregunta fue etiquetada Rails por el OP, ese es el punto
cumplir el

Lo entiendo, no veo por qué se eliminó la etiqueta. Edité la pregunta y dejé en claro que se trata de Rails. Está pendiente de revisión.
Joó Ádám


0

Si desea una cadena, las otras respuestas están bien, pero si lo que está buscando son las primeras letras como caracteres, puede acceder a ellas como una lista:

your_text.chars.take(30)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.