Regex 如何在Clojure中使用正则表达式筛选目录列表

Regex 如何在Clojure中使用正则表达式筛选目录列表,regex,clojure,Regex,Clojure,给定一个正则表达式和一个目录路径,如何获取路径与正则表达式匹配的文件序列 i、 我想要 (require '[clojure.java.io :as io]) (regex-file-seq #"\.ssh/.*\.pub$" (io/file "/home")) => (#<File /home/x/.ssh/iaf_dsa.pub> #<File ....>) (需要“[clojure.java.io:as-io]” (regex文件seq#“\.ssh/*

给定一个正则表达式和一个目录路径,如何获取路径与正则表达式匹配的文件序列

i、 我想要

(require '[clojure.java.io :as io])

(regex-file-seq #"\.ssh/.*\.pub$" (io/file "/home")) =>
(#<File /home/x/.ssh/iaf_dsa.pub> #<File ....>)
(需要“[clojure.java.io:as-io]”
(regex文件seq#“\.ssh/*\.pub$”(io/file/home))=>
(# #)
这花了我几分钟的时间把这些片段拼在一起,所以我想我应该把它贴出来。

可以帮你做到:

(defn regex-file-seq
  "Lazily filter a directory based on a regex."
  [re dir]
  (filter #(re-find re (.getPath %)) (file-seq dir)))
(glob "*.{jpg,gif}")

我看了看。我有点迟疑,因为两年来没有犯过罪。在这个特殊的例子中,它也不是我所需要的。这个库可以工作,但它的一个问题是它强制每个路径指向一个文件。如果您只想使用路径字符串(例如,以其他方式使用,如打开FileInputStream),请像这样使用:
(regex file seq#“*\.clj”(clojure.java.io/file dir path))
我试图在repl中使用它,但无法使用该序列。你知道怎么做吗?seq或者一个do-*fn来强迫懒惰的seq离开我的头顶。所有关于惰性seq的警告都适用……如果您也想在子目录上操作,该怎么办?这是
clj glob
所做的事情。