Як отримати підрядку тексту?


172

У мене текст довжиною ~ 700. Як мені отримати лише ~ 30 його перших персонажів?

Відповіді:



207

Використовуйте String#slice, також псевдонім як [].

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
Щоб було зрозуміло, -1використовується, щоб дістатися до кінця рядка, так a[1..-1] #=> "ello there".
Джошуа Пінтер

5
Це може бути очевидним для деяких, але це НЕ добре використовувати кому для негативних позицій: a[-4,-2]. Єдине припустиме позначення двох точок: a[-4..-2]. Навчився це важким шляхом.
cavpollo

24

Оскільки ви позначили Rails, ви можете використовувати скорочення:

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

Приклад:

 truncate(@text, :length => 17)

Уривок також приємно знати, він дозволяє відображати уривок тексту Так:

 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
Рубі - це не Рейки.
Joó Ádám

@ JoóÁdám тег змінив Ендрю Маршалл
apneadiving

Чи було виправдання для зміни? Якщо ОП працює в Rails і вимагає рішення в Rails, тоді питання слід позначати Rails. І тоді ваша відповідь мала б сенс.
Жоу Адам

@ JoóÁdám питання було позначене ОПР Rails, ось в чому справа
приєднавшись

Я розумію, я не бачу, чому тег було видалено. Я відредагував питання і дав зрозуміти, що це стосується Рейлів. Він очікує на розгляд.
Жоу Адам

12

якщо вам це потрібно в рейках, ви можете використовувати спочатку ( вихідний код )

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

є також останній ( вихідний код )

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

альтернативно перевірте з / до ( вихідний код ):

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

NoMethodError: undefined method `first' for "abcde":String, це реалізація рейок?
Тів

Так. але ви також можете скопіювати посилання на форму вихідного коду, які я опублікував
Арай Каряв

0

Якщо ви хочете ввести рядок, то інші відповіді чудово, але якщо ви шукаєте кілька перших букв як символів, ви можете отримати доступ до них як список:

your_text.chars.take(30)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.