我有以下目录:
当我使用
时(list (directory-files dir t "\\(mod\\)\\([0-9]\\)" nil))
输出是:
如您所见, mod100 位置不正确。所需的输出为:
感谢您的建议
答案 0 :(得分:1)
提供自定义谓词函数,提取数字部分:
(sort
(directory-files dir t "\\(mod\\)\\([0-9]\\)" nil)
(lambda (x y)
(<
(string-to-number (replace-regexp-in-string ".*mod\\([[:digit:]]+\\).*" "\\1" x))
(string-to-number (replace-regexp-in-string ".*mod\\([[:digit:]]+\\).*" "\\1" y)))))
答案 1 :(得分:0)
如directory-files
排序的帮助文档中所述,使用谓词string-lessp
,其中(string-lessp "100" "9")
返回t
。您可以编写自己的谓词并将nosort
设置为true,并使用cl-sort
通过提取字符串的数字部分对内容进行排序。如果您在可以访问sort -V
的计算机上,则可以包装shell命令
(defun my-sort (&optional dir)
(interactive "D")
(with-temp-buffer
(shell-command
(concat "ls " (shell-quote-argument (or dir default-directory)) "| sort -V")
(current-buffer))
(split-string (buffer-string) "\n")))
使用sort
版本排序应该会产生所需的排序。