如何在Emacs Lisp中获取字符串的子字符串?

时间:2012-09-05 04:19:53

标签: emacs elisp

当我有一个像“Test.m”这样的字符串时,如何通过elisp获得子串“Test”?我正在尝试在.emacs文件中使用它。

4 个答案:

答案 0 :(得分:21)

一种方法是使用substring(或substring-no-properties):

(substring "Test.m" 0 -2) => "Test"
  

substring STRING FROM &optional TO

     

返回一个新字符串,其内容是 STRING 的子字符串。该   返回的字符串由索引 FROM 之间的字符组成   (包括)和索引 TO (不包括) STRING FROM TO 是   零索引:0表示 STRING 的第一个字符。 负值   从 STRING 的末尾开始计算。如果 TO nil,则子串运行   到 STRING 的末尾。

答案 1 :(得分:9)

Stefan's answer是惯用的,只需要一个没有扩展名的文件名。但是,如果您在代码中大量操作文件和文件路径,我建议安装Johan Andersson的f.el文件和目录API,因为它在Emacs中提供了许多功能,并且具有一致的API。查看函数f-basef-no-ext

(f-base "~/doc/index.org") ; => "index"
(f-no-ext "~/doc/index.org") ; => "~/doc/index"

如果您经常使用字符串,请出于同样的原因安装Magnar Sveen的s.el。您可能对s-chop-suffix感兴趣:

(s-chop-suffix ".org" "~/doc/index.org") ; => "~/doc/index"

对于通用子字符串检索,请使用dkim's answer

答案 2 :(得分:7)

在您的特定情况下,您可能希望使用file-name-sans-extension

答案 3 :(得分:3)

可能最灵活的选择(虽然不清楚你是否需要灵活性)是使用replace-regexp-in-string

参见 C-h f replace-regexp-in-string RET

e.g:

(replace-regexp-in-string "\\..*" "" "Test.m")