Como obter uma substring de texto?

172

Eu tenho texto com comprimento ~ 700. Como obtenho apenas ~ 30 de seus primeiros caracteres?

Sam Witheker
fonte

Respostas:

243

Se você tiver seu texto na your_textvariável, poderá usar:

your_text[0..29]
Matteo Alessani
fonte
18
ouyour_text[0...30]
Tristeza
207

Use String#slice, também conhecido 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
Simone Carletti
fonte
31
Para ser claro, -1é usado para chegar ao final da string, então a[1..-1] #=> "ello there".
Joshua Pinter
5
Isso pode ser óbvio para alguns, mas é não problema em usar uma vírgula para posições negativas: a[-4,-2]. A notação só é válida se os dois pontos: a[-4..-2]. Aprendi da maneira mais difícil.
cavpollo
24

Desde que você o marcou como Rails, você pode usar truncar:

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

Exemplo:

 truncate(@text, :length => 17)

Também é bom saber que trechos permitem exibir um trecho de um texto.

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

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

apneadiving
fonte
9
Ruby não é Rails.
Joó Ádám
A tag @ JoóÁdám foi alterada por Andrew Marshall
apneadiving 14/11
Havia alguma justificativa para a mudança? Se o OP funcionar no Rails e solicitar uma solução no Rails, a pergunta deverá ser marcada com o Rails. E então sua resposta faria sentido.
Joó Ádám
@ JoóÁdám a pergunta foi marcada como Rails pelo OP, esse é o ponto
apneadiving
Entendi, não vejo por que a tag foi removida. Eu editei a pergunta e deixei claro que é sobre o Rails. Está pendente de revisão.
Joó Ádám
12

se você precisar dele em trilhos, você pode usar primeiro ( código fonte )

'1234567890'.first(5) # => "12345"

também existe o último ( código fonte )

'1234567890'.last(2) # => "90"

alternativamente, verifique de / para ( código fonte ):

"hello".from(1).to(-2) # => "ell"
Aray Karjauv
fonte
NoMethodError: undefined method `first' for "abcde":String, é uma implementação de trilhos?
Tiw
Sim, ele é. mas você também pode copiar fonte ligações forma de código que eu postei
Aray Karjauv
0

Se você deseja uma sequência, as outras respostas são boas, mas se o que você procura são as primeiras letras como caracteres, você pode acessá-las como uma lista:

your_text.chars.take(30)
user12341234
fonte