Якщо ви були дуже стурбовані національними символами та точним поводженням з класами символів 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)))
۱۲۳۴۵۶۷۸۹۰
але є деякі правдиві негативи, наприклад, арабська або іврит Алеф:א
,ا
.