Comment obtenir une sous-chaîne de texte?

172

J'ai un texte d'une longueur d'environ 700. Comment obtenir seulement ~ 30 de ses premiers caractères?

Sam Witheker
la source

Réponses:

243

Si vous avez votre texte en your_textvariable, vous pouvez utiliser:

your_text[0..29]
Matteo Alessani
la source
18
ouyour_text[0...30]
Sorrow
207

Utilisez String#slice, également aliasé comme [].

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
la source
31
Pour être clair, -1est utilisé pour arriver à la fin de la chaîne, donc a[1..-1] #=> "ello there".
Joshua Pinter
5
Cela peut être évident pour certains, mais il est pas correct d'utiliser une virgule pour les positions négatives: a[-4,-2]. La notation est uniquement valable deux points: a[-4..-2]. Je l'ai appris à la dure.
cavpollo
24

Depuis que vous l'avez étiqueté Rails, vous pouvez utiliser truncate:

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

Exemple:

 truncate(@text, :length => 17)

L'extrait est bon à savoir aussi, il vous permet d'afficher un extrait d'un texte comme ceci:

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

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

apnée
la source
9
Ruby n'est pas Rails.
Joó Ádám
Le tag @ JoóÁdám a été changé par Andrew Marshall
apneadiving
Y avait-il une justification pour le changement? Si l'OP fonctionne dans Rails et demande une solution dans Rails, la question doit être étiquetée avec Rails. Et puis votre réponse aurait du sens.
Joó Ádám
@ JoóÁdám, la question a été étiquetée Rails par l'OP, c'est le point
apneadiving
Je comprends, je ne vois pas pourquoi la balise a été supprimée. J'ai édité la question et précisé qu'il s'agissait de Rails. Il est en attente d'examen.
Joó Ádám
12

si vous en avez besoin dans les rails, vous pouvez d' abord utiliser ( code source )

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

il y a aussi le dernier ( code source )

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

ou vérifier de / vers ( code source ):

"hello".from(1).to(-2) # => "ell"
Aray Karjauv
la source
NoMethodError: undefined method `first' for "abcde":String, c'est une implémentation de rails?
Tiw
Oui, ça l'est. mais vous pouvez aussi copier les liens du formulaire de code source que j'ai posté
Aray Karjauv
0

Si vous voulez une chaîne, les autres réponses conviennent, mais si vous recherchez les premières lettres sous forme de caractères, vous pouvez y accéder sous forme de liste:

your_text.chars.take(30)
user12341234
la source