Используйте rstrip
PED File.basename(filename,File.extname(filename))
и заменить пробелы с подчеркиванием внутри него затем добавить extname
:
File.basename(filename,File.extname(filename)).rstrip.gsub(" ", "_") + File.extname(filename)
Смотрите Ruby demo
:
File.basename(filename,File.extname(filename))
- получить имя файла без расширения
.rstrip
- удалить пробелы перед расширением
.gsub(" ", "_")
- заменяет пробелы (используйте /\s+/
регулярное выражение, чтобы удалить пробельные) с подчеркиванием
File.extname(filename)
- расширение файла.
Если вы предпочитаете регулярки пути:
s = 'some example 2 .png'
puts s.gsub(/\s+(\.[^.]+\z)|\s/) {
Regexp.last_match(1) ?
Regexp.last_match(1) :
"_"
}
(can be shortened к s.gsub(/\s+(\.[^.]+\z)|\s/) { $1 || "_" }
(см Jordan's remark)). См. this Ruby demo.
Здесь шаблон совпадает:
\s+(\.[^.]+\z)
- 1 или более пробелов (\s+
) перед расширением (\.[^.]+
- точка с последующим 1+, отличных от точки до конца строки символов \z
), в то время как захватывая расширение в группе 1
|
- или
\s
- любой другой символ пробела (добавить +
после этого, если вам необходимо заменить целые кусочки пробела символами подчеркивания).
В блоке gsub
выполняется проверка для проверки группы 1, и при ее согласовании в результат вставляется только расширение. В противном случае пробел заменяется символом подчеркивания.
Помните, что '.' является специальным символом внутри регулярных выражений. – tadman