Emacs:替换文件扩展名

时间:2014-08-08 13:13:17

标签: regex emacs elisp

鉴于文件名,我想将文件扩展名替换为" .org"

我决定使用replace-regexp-in-string函数:

(replace-regexp-in-string "\\(.*\\)\..*$" "\\1.org" "file.conserv.module")

输出:

"file.conserv.modul.org"

我想,它会返回" file.conserv.org"比如在Perl程序中:

my $str = 'file.conserv.module';
$str =~ s/(.*)\..*$/$1.org/;
print $str;

我如何获得" file.conserv.org"?

2 个答案:

答案 0 :(得分:8)

这可以做你想要的,没有任何正则表达式:

(concat (file-name-sans-extension "file.conserv.module") ".org")

如果你想删除路径:

(concat (file-name-base "file.conserv.module") ".org")

答案 1 :(得分:2)

您需要在Emacs中使用两个反斜杠转义括号和.(并使用\'而不是$来匹配字符串的结尾):

(replace-regexp-in-string "\\(.*\\)\\..*\\'" "\\1.org" "file.conserv.module")

有关双重\转义的详细信息,请参阅the manual node on the \ character的底部。