178 votes

Comment obtenir une sous-chaîne de texte ?

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

251voto

Matteo Alessani Points 6368

Si vous avez votre texte dans your_text vous pouvez utiliser la variable :

your_text[0..29]

1 votes

Donc, en gros, 3 points(...) signifie que la fin est exclusive et 2 points(..) signifie que la fin est inclusive.

216voto

Simone Carletti Points 77653

Utilisez String#slice également connu sous le nom de [] .

a = "hello there"
a[1]                   #=> "e"
a[1,3]                 #=> "ell"
a[1..3]                #=> "ell"
a[6..-1]               #=> "there"
a[6..]                 #=> "there" (requires Ruby 2.6+)
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

32 votes

Pour être clair, -1 est utilisé pour aller à la fin de la chaîne, donc a[1..-1] #=> "ello there" .

6 votes

Cela peut paraître évident pour certains, mais c'est no Il est bon d'utiliser une virgule pour les positions négatives : a[-4,-2] . La seule notation valable est celle des deux points : a[-4..-2] . Je l'ai appris à la dure.

24voto

apneadiving Points 64660

Puisque vous l'avez tagué 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 également utile, car il vous permet d'afficher un extrait de texte :

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

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

0 votes

Le tag @JoóÁdám a été changé par Andrew Marshall

0 votes

Ce changement était-il justifié ? Si le PO travaille dans Rails et demande une solution dans Rails, alors la question devrait être étiquetée avec Rails. Et votre réponse aurait alors un sens.

0 votes

@JoóÁdám la question a été étiquetée Rails par le PO, c'est le but.

15voto

Aray Points 364

Si vous en avez besoin dans rails vous pouvez utiliser premièrement ( code source )

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

il y a aussi dernier ( code source )

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

ou bien vérifier de/à ( code source ):

"hello".from(1).to(-2) # => "ell"

1voto

user12341234 Points 2907

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

your_text.chars.take(30)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X