Уберите все из конечной косой черты - PullRequest
0 голосов
/ 18 октября 2018

Начиная с этой строки:

file = "[/my/directory/file-*.log]"

Я хочу удалить все, что идет после завершающего / и закрывающей квадратной скобки, поэтому возвращаемая строка:

file = "[/my/directory/]"

Интересно, может ли кто-нибудь порекомендовать самый безопасный способ сделать это?

Я экспериментировал с chomp, но я никуда не попал, и gsub или sub, похоже, не подходитлибо.

Ответы [ 5 ]

0 голосов
/ 19 октября 2018
file.split('/').take(file.split('/').size - 1).join('/') + ']'
=> "[/my/directory]"
  1. Разделить строку на массив строк, разделенных /
  2. Взять все элементы массива, кроме последнего элемента
  3. Соединить строки, занововставив между ними /
  4. Добавить трейлинг ]
0 голосов
/ 19 октября 2018

Если он застрял в скобках, вы всегда можете написать пользовательскую функцию замены, которая вызывает File.dirname:

def squaredir(file)
  file.sub(/\[([^]]+)\]/) do |m|
    '[%s]' % File.dirname($1)
  end
end

Тогда вы получите это:

squaredir("[/my/directory/file-*.log]")
# => "[/my/directory]"
0 голосов
/ 18 октября 2018
file = "[/my/directory/file-*.log]"
file.sub(/^(.+)\/([^\/]+)\]/, '\1/]')
=> "[/my/directory/]"
0 голосов
/ 18 октября 2018

Вот три решения без регулярных выражений:

file[0..file.rindex('/')] << ']'

file.sub(file[file.rindex('/')+1..-2], '')

"[#{File.dirname(file[1..-2])}]"

Все возвращают "[/my/directory/]".

0 голосов
/ 18 октября 2018

Вы можете использовать File.dirname:

File.dirname("/my/directory/file-*.log")
=> "/my/directory"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...