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?

Réponses:



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

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


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"

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.