En caso de que estuviera muy preocupado por los caracteres nacionales y el tratamiento preciso de las clases de caracteres Unicode, la única solución que pude encontrar hasta ahora es la regex
biblioteca Python . Ambos grep
y Perl
(¡para mi sorpresa!) No hicieron el trabajo correctamente.
Por lo tanto, la expresión regular que está después es la siguiente: \p{L}
. Esto se conoce como versión abreviada de la propiedad Unicode, la versión completa es \p{Letter}
o incluso p\{General_Category=Letter}
. Letter
es en sí misma una clase compuesta, pero no entraré en detalles, la mejor referencia que pude encontrar sobre el tema está aquí .
La biblioteca de Python no está integrada en el lenguaje (es una alternativa a la re
biblioteca integrada ). Entonces, necesitaría instalarlo, por ejemplo:
# pip install regex
Entonces, puedes usarlo así:
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'>
>>>
También podría colocar este script en algún lugar donde pueda acceder a él:
#!/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
Y llámelo desde Emacs así (supongamos que guardó este script en ~/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)))
۱۲۳۴۵۶۷۸۹۰
pero hay algunos negativos verdaderos, por ejemplo, árabe o hebreo Alef:א
,ا
.五
se considera como el número5
en japonés. Su código considera esto una carta. Tal vez es una letra (como en número romanov
). Quizás alguien que esté familiarizado con el japonés pueda verificar esto.五
es como la palabra inglesafive
, entonces es una letra. Cuando escriben el número 5 en lugar de la palabra cinco, usan5
igual que el inglés.