Как получить подстроку текста?


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]. Узнал это трудным путем.
Кавполло

24

Поскольку вы пометили его как Rails, вы можете использовать truncate:

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 был изменен Эндрю Маршаллом
апонадив

Было ли какое-либо оправдание для изменения? Если OP работает в Rails и запрашивает решение в Rails, тогда вопрос должен быть помечен как Rails. И тогда ваш ответ будет иметь смысл.
Joó Ádám

@ JoóÁdám вопрос был помечен Rails OP, вот в чем суть
апонадив

Я понимаю, я не понимаю, почему был удален тег. Я отредактировал вопрос и дал понять, что речь идет о Rails. Это ожидает рассмотрения.
Joó Ádám

12

если вам это нужно в rails, вы можете использовать сначала ( исходный код )

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

есть и последний ( исходный код )

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

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

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

NoMethodError: undefined method `first' for "abcde":StringРеализация рельсов?
Ее

Да, это так. но вы также можете скопировать ссылки на исходные коды, которые я разместил
Aray Karjauv

0

Если вам нужна строка, то другие ответы хороши, но если вы ищете первые несколько букв в виде символов, вы можете получить к ним доступ в виде списка:

your_text.chars.take(30)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.