Скажем, у меня есть строка: Hey what up @dude, @how it going?
Я хочу удалить все символы до @how's
.
Скажем, у меня есть строка: Hey what up @dude, @how it going?
Я хочу удалить все символы до @how's
.
или с регулярным выражением:
str = "Hey what up @dude, @how it going?"
str.gsub!(/.*?([email protected])/im, "") #=> "@how it going?"
вы можете прочитать о поиске на здесь
Используйте String # slice
s = "Hey what up @dude, @how it going?"
s.slice(s.index("@how")..-1)
# => "@how it going?"
Есть буквально десятки способов сделать это. Вот те, которые я буду использовать:
Если вы хотите сохранить исходную строку:
str = "Hey what up @dude, @how it going?"
str2 = str[/@how's.+/mi]
p str, str2
#=> "Hey what up @dude, @how it going?"
#=> "@how it going?"
Если вы хотите изменить исходную строку:
str = "Hey what up @dude, @how it going?"
str[/\A.+?([email protected]'s)/mi] = ''
p str
#=> "@how it going?"
... или...
str = "Hey what up @dude, @how it going?"
str.sub! /\A.+?([email protected]'s)/mi, ''
p str
#=> "@how it going?"
Для начала привязки \A
к началу строки и флага m
убедитесь, что вы сопоставляете несколько строк.
Может быть, проще всего для мутирования оригинала:
str = "Hey what up @dude, @how it going?"
str.replace str[/@how's.+/mi]
p str
#=> "@how it going?"
String#slice
и String#index
отлично работать но взорвется ArgumentError: плохое значение для диапазона, если игла не находится в стоге сена.
Используя String#partition
или String#rpartition
, возможно, лучше работать в этом случае:
s.partition "@how's"
# => ["Hey what up @dude, ", "@how's", " it going?"]
s.partition "not there"
# => ["Hey what up @dude, @how it going?", "", ""]
s.rpartition "not there"
# => ["", "", "Hey what up @dude, @how it going?"]
Простой способ получить только интересующую вас деталь.
>> s="Hey what up @dude, @how it going?"
=> "Hey what up @dude, @how it going?"
>> s[/@how.*$/i]
=> "@how it going?"
Если вам действительно нужно изменить строковый объект, вы всегда можете сделать s=s[...]
.
>> "Hey what up @dude, @how it going?".partition("@how's")[-2..-1].join
=> "@how it going?"
Нечувствительность к регистру
>> "Hey what up @dude, @HoW it going?".partition(/@how's/i)[-2..-1].join
=> "@HoW it going?"
Или используя scan()
>> "Hey what up @dude, @HoW it going?".scan(/@how's.*/i)[0]
=> "@HoW it going?"
Вы также можете напрямую вызвать []
также в строке (то же, что и slice
)
s = "Hey what up @dude, @how it going?"
start_index = s.downcase.index("@how")
start_index ? s[start_index..-1] : ""