当我有一个像“Test.m”这样的字符串时,如何通过elisp获得子串“Test”?我正在尝试在.emacs
文件中使用它。
答案 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-base
和f-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")