2013-06-20 3 views
0

У меня есть эта СтрокаРубин Замена частей строки

s = "03:23 PM on 09/04/12" 

Я хочу, чтобы вывезти «на» и заменить его просто пробелом « ». Я думал, что метод gsub строки, наряду с регулярным выражением, будет лучшим решением. Я просто не знаю, почему это не сработает.

s ="03:23 PM on 09/04/12" 
s.gsub(/ on /, ' ') 
puts s 
#=> "03:23 PM on 09/04/12" 
+1

'gsub' возвращает измененную строку,' GSUB! 'Мутирует строку на месте. – thomasfedb

ответ

3

gsub метод А струны возвращает измененную строку и оставляет строку объекта в одиночку. Если вы хотите изменить объект на месте, вы должны использовать gsub!.

Кроме того, если вы хотите изменить только одно событие, то sub, вероятно, лучший выбор.

Так

s = "03:23 PM on 09/04/12" 

s = s.sub(' on ', ' ') 

или

s.sub!(' on', ' ') 
+1

'sub', потому что он меняет первое вхождение, может быть намного быстрее, чем' gsub' при работе с длинными строками. 'sub' немедленно выйдет, а' gsub' сканирует оставшуюся строку для дополнительных целей для замены. –

+1

@ theTinMan: Чтобы быть справедливым, преимущество вряд ли будет значительным, особенно на двадцать символов. – Borodin

+0

Как я уже сказал, это затрагивает длинные строки, особенно когда речь идет о многих из них. –

2

отлично подходит для меня ... Возможно, вы хотели использовать gsub!?

>> s ="03:23 PM on 09/04/12" 
=> "03:23 PM on 09/04/12" 
>> s.gsub(/ on /, ' ') 
=> "03:23 PM 09/04/12" 
>> s.gsub!(/ on /, ' ') 
=> "03:23 PM 09/04/12" 
>> s 
=> "03:23 PM 09/04/12" 
0
s ="03:23 PM on 09/04/12" 
s.gsub(' on ', ' ') 
#>> "03:23 PM 09/04/12" 

Вы можете пойти без regex в этом случае, но если вы хотите использовать regex, а затем использовать s.gsub!(/ on /, ' ')

2

Вы не обязаны использовать объект РегВыр для параметра GSUB (/ on /) вы также можете использовать строку - это сработало для меня!

s = "03:23 PM on 09/04/12" 

p s.gsub " on ", " " 
#=> "03:23 PM 09/04/12"