使用`Dir.entries("。")`从数组中删除括号单引号和句点

时间:2016-03-14 06:49:17

标签: ruby

我正在Dir.entries('.') { |e| "<p>#{e}</p>" }输出目录。但是,它会像在bash中一样打印整个数组。

示例输出:[".", "..", "162001", "162002", "162003"]

如何更改公式以删除仅留下文本的特殊字符和句点?

编辑:

我想要实现的示例输出是:
162001
162002
162003
等...

我目前在html页面上获取的示例,需要消除: 我只需要查看文件夹名称,没有别的 enter image description here

2 个答案:

答案 0 :(得分:1)

根据我的理解,根据您的示例,您将...称为“特殊字符和句点”。这些是类Unix的隐藏文件(dotfiles)。如果要列出除隐藏文件以外的所有文件,可以使用:

Dir.glob("*").map { |e| "<p>#{e}</p>" }

或删除所有特殊字符命名文件:

Dir.entries('.').map { |e| "<p>#{e}</p>" if e.delete(' ') =~ /\w/ }.compact #using delete to remove spaces before regex

这里我们拒绝包含除字母,数字和下划线之外的任何字符的所有文件名。

要在单独的行中获取String输出:

puts Dir.entries('.').map { |e| "<p>#{e}</p>" if e.delete(' ') =~ /\w/ }.compact.join("\n")

答案 1 :(得分:0)

你可以试试这种方式

如果您只想要该目录的目录

>> Dir.entries(".").select {|f| File.directory? f}
=> [".", "..", "api_product", "connection_pool", "factory_girl",
e_api", "todo"]

现在删除所有特殊字符

>> Dir.entries(".").select {|f| File.directory? f}.join(" ").gsub!(/[^0-9A-Za-z]/, ' ').strip
=> "api product connection pool factory girl grape lonely lonely batch mysql2 postgres rails rubocop salesforceheroku salesforceheroku2 sidekiq simple api todo"

我想你想要下面的

 irb(main):064:0* Dir.entries(".").select {|f| File.directory? f}.join(" ").gsub!(/[^0-9A-Za-z]/, ' ').strip
=> "api product connection pool factory girl grape lonely lonely batch mysql2 postgres rails rubocop salesforceheroku salesforceheroku2 sidekiq simple api todo"
irb(main):065:0> Dir.entries(".").select {|f| File.directory? f}.join("  ").gsub!(/[^0-9A-Za-z]/, ' ').strip
=> "api product  connection pool  factory girl  grape  lonely  lonely batch  mysql2  postgres  rails  rubocop  salesforceheroku  salesforceheroku2  sidekiq  simple api  todo"
irb(main):066:0> Dir.entries(".").select {|f| File.directory? f}.join("  ").gsub!(/[^0-9A-Za-z]/, ' ').strip.split("  ")
=> ["api product", "connection pool", "factory girl", "grape", "lonely", "lonely batch", "mysql2", "postgres", "rails", "rubocop", "salesforceheroku", "salesforceheroku2", "sidekiq", "simple api", "to
do"]
irb(main):067:0> Dir.entries(".").select {|f| File.directory? f}.join("  ").gsub!(/[^0-9A-Za-z]/, ' ').strip.split("  ").map{|c| "<p>"+c+"</p>"}
=> ["<p>api product</p>", "<p>connection pool</p>", "<p>factory girl</p>", "<p>grape</p>", "<p>lonely</p>", "<p>lonely batch</p>", "<p>mysql2</p>", "<p>postgres</p>", "<p>rails</p>", "<p>rubocop</p>",
 "<p>salesforceheroku</p>", "<p>salesforceheroku2</p>", "<p>sidekiq</p>", "<p>simple api</p>", "<p>todo</p>"]

这里我用“”双空格分隔两个单词(就像从所有api产品中删除“_”后,连接池将被双倍空格分隔,以便我可以用

Dir.entries(".").select {|f| File.directory? f}.join("  ").gsub!(/[^0-9A-Za-z]/, ' ').strip.split("  ").map{|c| "<p>"+c+"</p>"}

查看joinsplit都有双倍空格