Если вы очень беспокоились о национальных символах и точном обращении с классами символов Unicode, то единственное решение, которое мне удалось найти, - это regex
библиотека Python . И то, grep
и другое Perl
(к моему крайнему удивлению!) Не справились со своей задачей.
Таким образом, регулярное выражение вы после это одна: \p{L}
. Это называется сокращенной версией свойства Unicode, полная версия - \p{Letter}
или даже p\{General_Category=Letter}
. Letter
сам по себе составной класс, но я не буду вдаваться в подробности, лучшая ссылка, которую я смог найти по этому вопросу, здесь .
Библиотека Python не встроена в язык (это альтернатива встроенной re
библиотеке). Итак, вам нужно будет установить его, например:
# pip install regex
Затем вы можете использовать его так:
import regex
>>> regex.match(ur'\p{L}+', u'۱۲۳۴۵۶۷۸۹۰')
>>> regex.match(ur'\p{L}+', u'абвгд')
<regex.Match object; span=(0, 5), match=u'\u0430\u0431\u0432\u0433\u0434'>
>>> regex.match(ur'\p{L}+', u'123')
>>> regex.match(ur'\p{L}+', u'abcd')
<regex.Match object; span=(0, 4), match=u'abcd'>
>>>
Вы также можете поместить этот скрипт где-нибудь, где вы можете получить к нему доступ:
#!/usr/bin/env python
import regex
import sys
if __name__ == "__main__":
for match in regex.finditer(ur'\p{L}+', sys.argv[1].decode('utf-8')):
print match.string
И назовите его из Emacs следующим образом (предположим, вы сохранили этот скрипт в ~/bin
):
(defun unicode-character-p ()
(interactive)
(let* ((current (char-after (point)))
(result (shell-command-to-string
(format "~/bin/is-character.py '%c'" current))))
(message
(if (string= result "") "Character %c isn't a letter"
"Character %c is a letter")
current)))
۱۲۳۴۵۶۷۸۹۰
но есть некоторые негативы, например, арабский или иврит алеф:א
,ا
.