【问题标题】:Check if a character (not string) is lowercase, uppercase, alphanumeric?检查一个字符(不是字符串)是小写、大写还是字母数字?
【发布时间】:2015-01-06 12:04:19
【问题描述】:

在 Elisp 中检查单个字符是否为小写、大写、字母数字、数字、空格或任何其他类似字符类别的惯用且​​最有效的方法是什么?例如Python 有类似isdigit() 的字符串方法,但是在 Elisp 中将字符(只是一个数字)转换为字符串以检查它是否属于某个案例或类别似乎是错误的方法:

(string-match-p "[[:lower:]]" (char-to-string ?a))

【问题讨论】:

  • char-syntax 应该非常高效,但它的包装没有你想要的那么好。

标签: emacs character elisp uppercase


【解决方案1】:

使用 get-char-code-property 查找字符的 Unicode 一般类别。例如,一个小写字母的值是"Ll"

(string= "Ll" (get-char-code-property ?a 'general-category))
     ⇒ t

大写字母为"Lu",十进制数字为"Nd"。见full list of values

【讨论】:

    【解决方案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-lib.el 中的cl-digit-char-p

    【讨论】:

      猜你喜欢
      • 2014-02-12
      • 2015-04-23
      • 2020-10-21
      • 1970-01-01
      • 2021-12-17
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      相关资源
      最近更新 更多