Au cas où vous seriez très préoccupé par les caractères nationaux et le traitement précis des classes de caractères Unicode, alors la seule solution que j'ai pu trouver jusqu'à présent est la regexbibliothèque Python . Les deux grepet Perl(à ma grande surprise!) N'ont pas fait le travail correctement.
Ainsi, l'expression régulière que vous êtes est après celui - ci: \p{L}. Ceci est connu comme la version abrégée de la propriété Unicode, la version complète est \p{Letter}ou même p\{General_Category=Letter}. Letterest en soi une classe composite, mais je n'entrerai pas dans les détails, la meilleure référence que j'ai pu trouver sur le sujet est ici .
La bibliothèque Python n'est pas intégrée au langage (c'est une alternative à la rebibliothèque intégrée). Vous devez donc l'installer, par exemple:
# pip install regex
Ensuite, vous pouvez l'utiliser comme ceci:
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'>
>>>
Vous pouvez également placer ce script quelque part où vous pouvez y accéder:
#!/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
Et appelez-le depuis Emacs comme ceci (supposons que vous ayez enregistré ce script ~/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)))
۱۲۳۴۵۶۷۸۹۰mais il y a quelques vrais négatifs, par exemple l'arabe ou l'hébreu Alef:א,ا.