2016-08-23 29 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

是的......这就是为什么我发布了评论的原因。 –

相关问题