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

如何在Emacs Lisp中获取字符串的子字符串?,emacs,elisp,Emacs,Elisp,当我有一个像“Test.m”这样的字符串时,如何通过elisp从中得到子字符串“Test”?我试图在我的.emacs文件中使用它 一种方法是使用子字符串(或子字符串无属性): (substringSTRING FROM&可选TO) 返回一个新字符串,其内容是字符串的子字符串。这个 返回的字符串由来自的索引之间的字符组成 (包括)和字符串的索引(不包括)。来来往往 零索引:0表示字符串的第一个字符负值 从字符串末尾开始计数。如果TO为nil,则子字符串将运行 到字符串的末尾 可能最灵活的选择(尽管

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

一种方法是使用
子字符串
(或
子字符串无属性
):

substring
STRING FROM
&可选
TO)

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


可能最灵活的选择(尽管不清楚您是否需要灵活性)是使用
替换字符串中的regexp

请参见字符串中的C-hf
replace regexp
RET

e、 g:

(替换字符串“\\..*”“”Test.m”中的regexp)

在您的特定情况下,当您只需要一个没有扩展名的文件名时,您可能希望使用
无扩展名的文件名。但是,如果您在代码中大量操作文件和文件路径,我建议安装Johan Andersson的文件和目录API,因为它提供了许多Emacs中缺少的函数,这些函数具有一致的API。签出函数和:

相反,如果您经常使用字符串,出于同样的原因安装Magnar Sveen's。您可能对以下内容感兴趣:


对于通用子字符串检索,请使用。

这是一个很好的高级解决方案。谢谢。对于目录和文件名中的基本子字符串,elisp中有
文件名组件
函数
(substring "Test.m" 0 -2) => "Test"
(f-base "~/doc/index.org") ; => "index"
(f-no-ext "~/doc/index.org") ; => "~/doc/index"
(s-chop-suffix ".org" "~/doc/index.org") ; => "~/doc/index"