检查Elisp中的单个字符是小写,大写,字母数字,数字,空格还是任何其他类似字符类别的惯用和最有效的方法是什么?例如,Python具有类似isdigit()
的字符串方法,但是将字符(只是一个数字)转换为Elisp中的字符串以检查它是否属于某个案例或类别似乎是一种错误的方法:
(string-match-p "[[:lower:]]" (char-to-string ?a))
答案 0 :(得分:2)
没有标准的方法,但我认为推出自己的方法并不难:
(defun wordp (c) (= ?w (char-syntax c)))
(defun lowercasep (c) (and (wordp c) (= c (downcase c))))
(defun uppercasep (c) (and (wordp c) (= c (upcase c))))
(defun whitespacep (c) (= 32 (char-syntax c)))
另请参阅cl-digit-char-p
中的cl-lib.el
。
答案 1 :(得分:0)
使用 get-char-code-property 查找字符的Unicode常规类别。例如,小写字母的值为"Ll"
:
(string= "Ll" (get-char-code-property ?a 'general-category))
⇒ t
大写字母为"Lu"
,十进制数字为"Nd"
。参见full list of values。