我怎样才能找到任何空格"。"

时间:2016-08-23 20:00:01

标签: ruby regex

我有名字"例如.png"和"示例2.png"。我正在尝试将任何空间转换为" _"和#34;之前的任何空间。"应该删除。

到目前为止,我这样做:

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

1 个答案:

答案 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 shorteneds.gsub(/\s+(\.[^.]+\z)|\s/) { $1 || "_" }(见Jordan's remark))。 请参阅this Ruby demo

此处,模式匹配:

  • \s+(\.[^.]+\z) - 扩展前的一个或多个空格(\s+)(\.[^.]+ - 在字符串{{1}结尾之前的一个点后跟一个点后跟一个字符}),而将扩展程序捕获到第1组
  • \z - 或
  • | - 任何其他空格符号(如果需要用下划线替换整个空格块,请在其后面添加\s)。

+块中,执行检查以测试组1,如果匹配,则仅将扩展插入到结果中。否则,空格将替换为下划线。