当我有一个像“Test.m”这样的字符串时,我怎样才能通过 elisp 从中获取子字符串“Test”?我正在尝试在我的.emacs
文件中使用它。
4 回答
一种方法是使用substring
(或substring-no-properties
):
(substring "Test.m" 0 -2) => "Test"
(从到
substring
的字符串 )&optional
返回一个新字符串,其内容是STRING的子字符串。返回的字符串由STRING的索引FROM (包括)和索引TO(不包括)之间的字符组成。 FROM和TO是零索引的:0 表示STRING的第一个字符。 负值从STRING的末尾开始计算。 如果TO是,则子字符串将运行到STRING的末尾。
nil
当您只需要一个没有扩展名的文件名时,Stefan 的回答是惯用的。但是,如果您在代码中大量操作文件和文件路径,我建议安装 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"
相反,如果您经常使用字符串,出于s.el
同样的原因安装 Magnar Sveen's。您可能对以下内容感兴趣s-chop-suffix
:
(s-chop-suffix ".org" "~/doc/index.org") ; => "~/doc/index"
对于通用子字符串检索,请使用dkim's answer。
在您的特定情况下,您可能希望使用file-name-sans-extension
.
可能最灵活的选择(虽然不清楚是否需要灵活性)是使用replace-regexp-in-string
:
看C-hf replace-regexp-in-string
RET
例如:
(replace-regexp-in-string "\\..*" "" "Test.m")