2016-08-23 31 views
1

我有名字「example .png」和「example 2.png」。我試圖將任何空間轉換爲「_」和「」之前的任何空格。應該被刪除。如何在「。」之前找到空格。

到目前爲止,我這樣做是這樣的:

file.gsub(" .",".").gsub(" ", "_").gsub(".tif", "") 
+0

請記住'.'是正則表達式中的特殊字符。 – tadman

回答

1

使用的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 shorteneds.gsub(/\s+(\.[^.]+\z)|\s/) { $1 || "_" }(見Jordan's remark))。 見this Ruby demo

在此,模式匹配:

  • \s+(\.[^.]+\z) - 1以上空格(\s+)擴展之前(\.[^.]+ - 一個點,隨後以比串\z結束之前的點其他1+字符),而捕捉拓成1組
  • | - 或
  • \s - 任何其他的空格符號(後添加+如果你需要用下劃線替換整個空格塊)。

gsub塊中,執行檢查以測試組1,如果匹配,則只有擴展插入到結果中。否則,用空格替換下劃線。

+0

更簡潔:'s.gsub(/.../){$ 1 || 「_」}'。 –

+0

@Jordan:是的,邏輯保持不變:組1或 - 如果它不匹配 - 使用'_'替換。 –

+0

是的......這就是爲什麼我發佈了評論的原因。 –

相關問題