ruby — удаление из строки

#ruby #string

#ruby #строка

Вопрос:

У меня есть следующие строки:

 src = "dav://w.lvh.me:3000/Home/Transit/file"
host = "w.lvh.me:3000"
  

Что я хочу получить, так это "/Home/Transit/file" использовать эти две строки

Я думал выполнить поиск host в src и удалить его при первом его появлении и все, что было до него, но я не уверен точно, как это сделать. Или, может быть, есть способ получше?

Буду признателен за любую помощь!

Ответ №1:

Действительно, есть способ получше:

 require 'uri'
src = "dav://w.lvh.me:3000/Home/Transit/file"
src = URI.parse src

src.path      # => "/Home/Transit/file"
  

Когда в строке есть пробелы, вы должны пройти дополнительный шаг экранирования / отмены экранирования. К счастью, это просто:

 require 'uri'
src = "dav://w.lvh.me:3000/Home/Transit/Folder 144/webdav_put_request"
src = URI.parse(URL.escape src)

URL.unescape(src.path)      # => "/Home/Transit/Folder 144/webdav_put_request"
  

Комментарии:

1. Идеальный ответ. Не все должно сводиться к регулярному выражению. Вам нужен анализатор URI для разбора URI, а не очередное неисправное регулярное выражение.

2. я забыл спросить, что, если в src есть пробелы ? URI.parse выдает ошибку, например, если src = "dav://w.lvh.me:3000/Home/Transit/Folder 144/webdav_put_request"

3. Спасибо. Я попытался выполнить экранирование с помощью пользовательской функции, но я думаю, что это не сработало правильно. URI.escape работает нормально!

Ответ №2:

Это должно выполнить задание:

 src = "dav://w.lvh.me:3000/Home/Transit/file"
host = "w.lvh.me:3000"
result = src.sub(/.*#{host}/, '')
#=> "/Home/Transit/file"