在Ruby中,我有一个任意的字符串,我想把它转换成一个有效的Unix / Linux文件名.只要它在视觉上可识别为起始的字符串,它的最终形式看起来并不重要.一些可能的例子:
"Here's my string!" => "Heres_my_string"
"* is an asterisk, you see" => "is_an_asterisk_you_see"
有什么内置的(也许在文件库中)会完成这个(或者接近这个)?
最佳答案
根据您的规格,您可以使用正则表达式替换完成此操作.该正则表达式将匹配除基本字母和数字之外的所有字符:
s/[^\w\s_-]+//g
这将删除任何多余的空格之间的话,如你的例子所示:
s/(^|\b\s)\s+($|\s?\b)/\\1\\2/g
最后,用下划线替换剩余的空格:
s/\s+/_/g
这里是Ruby:
def friendly_filename(filename)
filename.gsub(/[^\w\s_-]+/, '')
.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
.gsub(/\s+/, '_')
end
相关文章
转载注明原文:将Ruby字符串转换为* nix filename兼容的字符串 - 代码日志