Ulusal karakterler ve Unicode karakter sınıflarının hassas muamelesi konusunda çok endişeliyseniz, o zamana kadar bulabildiğim tek çözüm Python regex
kütüphanesi . Hem grep
ve Perl
(benim için sürpriz!) İşi düzgün yapmadı.
Yani, peşinde normal ifadeniz biridir: \p{L}
. Bu Unicode özelliği kısayol sürümü olarak bilinir, tam sürüm \p{Letter}
hatta p\{General_Category=Letter}
. Letter
kendisi bileşik bir sınıf, ama ayrıntılara girmeyeceğim, bu konuda bulabileceğim en iyi referans burada .
Python kütüphanesi dilde yerleşik değildir (yerleşik kütüphaneye bir alternatiftir re
). Yani, yüklemeniz gerekir, örneğin:
# pip install regex
Sonra, şöyle kullanabilirsiniz:
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'>
>>>
Bu komut dosyasını erişebileceğiniz bir yere de koyabilirsiniz:
#!/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
Ve bu şekilde Emacs'tan çağırın (bu komut dosyasını kaydettiğinizi varsayalım ~/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)))
۱۲۳۴۵۶۷۸۹۰
ancak Arapça veya İbranice Alef gibi bazı gerçek olumsuzluklar vardır:א
,ا
.