【问题标题】:Most efficient way of matching file names with Ruby regex使用 Ruby 正则表达式匹配文件名的最有效方法
【发布时间】:2014-03-02 11:30:55
【问题描述】:

Dir.glob 方法用于实现匹配特定模式的文件名,但其参数具有类 Unix 语法(例如,以特定方式使用 *** 作为通配符等。 )。相反,我想使用 Ruby (Onigmo) 正则表达式来匹配模式来做同样的事情(使用它的通配符、量词、锚点、转义字符等)。最好的方法是什么?

想到的一种简单方法是使用Dir.glob 获取所有目录中所有现有文件的列表,并使用正则表达式过滤它们,但这看起来效率不高。或者,是吗?有没有更好的办法?

【问题讨论】:

  • 对我来说看起来很高效。
  • @sawa grep 命令理解所有类型的正则表达式,它可以让你根据需要编写正则表达式。写下来然后运行%x(grep pattern)。做man grep 并阅读手册。他们写得很好。
  • @sawa,也许他的意思是find,而不是grep:一些find 变体,如GNU 找到接受-regex 选项:find /path/to/dir -regex #{pattern}(不能环绕反引号)
  • @ArupRakshit, grep 通常匹配文件内容,而不是文件名。
  • @sawa 那就看看this

标签: ruby regex file dir


【解决方案1】:

你可以试试 Ruby 标准库中的Find module

require 'find'
Find.find(path).grep(/regex/)

find 方法以递归方式返回您作为参数提供的路径中存在的每条路径,这与您在 Dir.glob 中提到的非常相似。然后,您可以使用内置的 grep 方法通过正则表达式过滤结果。

这可能不是最有效的方法,因为 Dir.glob 是用 C 编写的,而 Find 模块是用 Ruby 编写的。我对我的主目录进行了测试,Find 比 Dir.glob 花费了更长的时间来获得结果,但是您也可以使用 Find 模块的 prune 方法来避免进入特定文件夹,这有助于提高效率使用查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2011-03-01
    相关资源
    最近更新 更多