我有名字「example .png」和「example 2.png」。我試圖將任何空間轉換爲「_」和「」之前的任何空格。應該被刪除。如何在「。」之前找到空格。
到目前爲止,我這樣做是這樣的:
file.gsub(" .",".").gsub(" ", "_").gsub(".tif", "")
我有名字「example .png」和「example 2.png」。我試圖將任何空間轉換爲「_」和「」之前的任何空格。應該被刪除。如何在「。」之前找到空格。
到目前爲止,我這樣做是這樣的:
file.gsub(" .",".").gsub(" ", "_").gsub(".tif", "")
使用的rstrip
PED File.basename(filename,File.extname(filename))
和替換空格用下劃線裏面再增加一個extname
:
File.basename(filename,File.extname(filename)).rstrip.gsub(" ", "_") + File.extname(filename)
詳情:
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+
)擴展之前(\.[^.]+
- 一個點,隨後以比串\z
結束之前的點其他1+字符),而捕捉拓成1組|
- 或\s
- 任何其他的空格符號(後添加+
如果你需要用下劃線替換整個空格塊)。在gsub
塊中,執行檢查以測試組1,如果匹配,則只有擴展插入到結果中。否則,用空格替換下劃線。
更簡潔:'s.gsub(/.../){$ 1 || 「_」}'。 –
@Jordan:是的,邏輯保持不變:組1或 - 如果它不匹配 - 使用'_'替換。 –
是的......這就是爲什麼我發佈了評論的原因。 –
請記住'.'是正則表達式中的特殊字符。 – tadman