是否有一个函数检查字符串是否以某个子字符串结尾? Python有endswith
:
>>> "victory".endswith("tory")
True
答案 0 :(得分:8)
只需安装s.el
字符串操作库并使用其s-suffix?
谓词:
(s-suffix? "turn." "...when it ain't your turn.") ; => t
但是如果你拒绝使用这个库,你必须编写自己的函数。在subr.el
中有string-prefix-p
,它类似于Python的str.startswith
,它只是compare-strings
的包装。根据{{3}}:
** New function `string-prefix-p'.
(This was actually added in Emacs 23.2 but was not advertised at the time.)
string-suffix-p
是Emacs 24.3 changelog,因此对于早期版本我写道:
(defun string-suffix-p (str1 str2 &optional ignore-case)
(let ((begin2 (- (length str2) (length str1)))
(end2 (length str2)))
(when (< begin2 0) (setq begin2 0))
(eq t (compare-strings str1 nil nil
str2 begin2 end2
ignore-case))))
(when (< begin2 0) (setq begin2 0))
是一种解决方法,因为如果您将负数传递给compare-strings
,则会使用*** Eval error *** Wrong type argument: wholenump, -1
进行限制。
如果字节编译该函数,它的工作速度比added only in Emacs 24.4解决方案快,即使{{1}}是C函数。
string-match
答案 1 :(得分:5)
您可以使用正则表达式调用string-match
函数。
(if (string-match "tory\\'" "victory")
(message "victory ends with tory.")
(message "victory does not ends with tory."))