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

Pet*_*ter 13 emacs elisp

当我有一个像"Test.m"这样的字符串时,如何从elisp中获取子字符串"Test"?我正在尝试在我的.emacs文件中使用它.

dki*_*kim 23

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

(substring "Test.m" 0 -2) => "Test"
Run Code Online (Sandbox Code Playgroud)

(substring STRING FROM &optional TO)

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


Mir*_*lov 9

当你只需要一个没有扩展名的文件名时,Stefan的答案是惯用的.但是,如果您在代码中大量操作文件和文件路径,我建议安装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"
Run Code Online (Sandbox Code Playgroud)

相反,如果您经常使用字符串,请安装Magnar Sveen s.el,原因相同.您可能对以下内容感兴趣s-chop-suffix:

(s-chop-suffix ".org" "~/doc/index.org") ; => "~/doc/index"
Run Code Online (Sandbox Code Playgroud)

对于通用子字符串检索,请使用dkim的答案.


Ste*_*fan 7

在您的特定情况下,您可能想要使用file-name-sans-extension.