Come ottenere una sottostringa di testo?


172

Ho testo con lunghezza ~ 700. Come posso ottenere solo ~ 30 dei suoi primi personaggi?

Risposte:



207

Utilizzare String#slice, anche alias come [].

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
Per essere chiari, -1viene utilizzato per arrivare alla fine della stringa, quindi a[1..-1] #=> "ello there".
Joshua Pinter,

5
Questo può essere ovvio per alcuni, ma è non è bene usare una virgola per le posizioni negative: a[-4,-2]. La notazione unico valido è i due punti: a[-4..-2]. L'ho imparato nel modo più duro.
Cavpollo,

24

Dato che l'hai taggato su Rails, puoi usare truncate:

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

Esempio:

 truncate(@text, :length => 17)

L'estratto è bello anche da sapere, ti consente di visualizzare un estratto di un testo In questo modo:

 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 non è Rails.
Joó Ádám,

Il tag @ JoóÁdám è stato modificato da Andrew Marshall
data

C'era qualche giustificazione per il cambiamento? Se l'OP funziona in Rails e richiede una soluzione in Rails, la domanda deve essere contrassegnata con Rails. E poi la tua risposta avrebbe senso.
Joó Ádám,

@ JoóÁdám la domanda è stata taggata Rails dall'OP, questo è il punto
ricordare il

Capisco, non vedo perché il tag è stato rimosso. Ho modificato la domanda e chiarito che si tratta di Rails. È in attesa di revisione.
Joó Ádám,


0

Se vuoi una stringa, allora le altre risposte vanno bene, ma se quello che stai cercando sono le prime lettere come caratteri puoi accedervi come un elenco:

your_text.chars.take(30)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.