Caso você estivesse muito preocupado com os caracteres nacionais e com o tratamento preciso das classes de caracteres Unicode, a única solução que encontrei até agora é a regex
biblioteca Python . Ambos grep
e Perl
(para minha total surpresa!) Não fizeram o trabalho corretamente.
Assim, a expressão regular que você está depois é este: \p{L}
. Isso é conhecido como versão abreviada da propriedade Unicode, a versão completa é \p{Letter}
ou mesmo p\{General_Category=Letter}
. Letter
é uma classe composta, mas não vou entrar em detalhes, a melhor referência que pude encontrar sobre o assunto está aqui .
A biblioteca Python não está embutida na linguagem (é uma alternativa à re
biblioteca embutida ). Então, você precisaria instalá-lo, por exemplo:
# pip install regex
Então, você pode usá-lo da seguinte maneira:
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'>
>>>
Você também pode colocar esse script em algum lugar onde você pode acessá-lo:
#!/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
E chame-o do Emacs assim (suponha que você tenha salvo esse 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)))
۱۲۳۴۵۶۷۸۹۰
mas existem alguns negativos verdadeiros, por exemplo, árabe ou hebraico Alef:א
,ا
.