我有名字"例如.png"和"示例2.png"。我正在尝试将任何空间转换为" _"和#34;之前的任何空间。"应该删除。
到目前为止,我这样做:
file.gsub(" .",".").gsub(" ", "_").gsub(".tif", "")
答案 0 :(得分: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 shortened到s.gsub(/\s+(\.[^.]+\z)|\s/) { $1 || "_" }
(见Jordan's remark))。
请参阅this Ruby demo。
此处,模式匹配:
\s+(\.[^.]+\z)
- 扩展前的一个或多个空格(\s+
)(\.[^.]+
- 在字符串{{1}结尾之前的一个点后跟一个点后跟一个字符}),而将扩展程序捕获到第1组 \z
- 或|
- 任何其他空格符号(如果需要用下划线替换整个空格块,请在其后面添加\s
)。在+
块中,执行检查以测试组1,如果匹配,则仅将扩展插入到结果中。否则,空格将替换为下划线。