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 regex
bibliothèque Python . Les deux grep
et 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}
. Letter
est 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 re
bibliothè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:א
,ا
.