19

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

4

4 回答 4

34

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

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

substring 的字符串 &optional

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

于 2012-09-05T04:49:11.003 回答
10

当您只需要一个没有扩展名的文件名时,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"

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

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

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

于 2014-03-18T04:43:04.293 回答
8

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

于 2012-09-05T15:13:52.917 回答
4

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

C-hf replace-regexp-in-string RET

例如:

(replace-regexp-in-string "\\..*" "" "Test.m")
于 2012-09-05T04:57:31.953 回答