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.